Laden...

PreviewHandler Control mit hängendem Winword.exe Prozess

Erstellt von wakestar vor 10 Jahren Letzter Beitrag vor 10 Jahren 2.000 Views
wakestar Themenstarter:in
383 Beiträge seit 2006
vor 10 Jahren
PreviewHandler Control mit hängendem Winword.exe Prozess

Hallo zusammen

Ich hab' ein Control Add-in für Dynamics NAV 2013 (Navision) erstellt, mit dem man direkt im NAV den Dateiinhalt (z.Bsp. PDF, Doc, XLS, etc...) sehen kann.

.NET resp. Winforms - Technisch handelt es sich um ein Control welches ein Panel hat. Auf diesem Panel sitzt ein PreviewHandlerHostControl

Das UserControl funktioniert grundsätzlich... d.h. wenn ich z.Bsp. eine Word-Datei auswähle... startet im Hintergrund autom. ein Winword-Prozess.
Wähle ich dann eine PDF - Datei aus, wird der Winword-Prozess sauber beendet und der PDF-Viewer-Prozess gestartet.

Das Problem:
Wenn ich die Dynamics NAV Page (Form) schliesse und ich eine Word-Datei in der Vorschau habe, dann bleibt mir der Winword - Prozess einfach hängen.
Ich bin nicht der Erste der dieses "Phänomen" hat...
Hosting Preview Handlers in Windows Forms Applications

Lösungvorschlag 1 aus den Blog-Kommentaren:

"I seem to have solved this problem by disposing the previewhandler in the “closing” event of the form –"

Was ich auch versucht habe... leider ohen Erfolg...


void Page_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (previewHandlerHostControl != null)
            {
                previewHandlerHostControl.ReleaseCOMObject();
                previewHandlerHostControl.Dispose();
                previewHandlerHostControl = null;                
            }
        }

public void ReleaseCOMObject()        
        {                     
            if (_comInstance != null)
            {                
                ((IPreviewHandler)_comInstance).Unload();             
                Marshal.FinalReleaseComObject(_comInstance); //quits the handler
                _comInstance = null;
            }            
        }

Testhalber hab ich ein neues WinForm - Projekt erstellt, welches NICHTS mit Dynamics NAV zu tun hat... und siehe da... beim Beenden des Forms bleibt der Winword-Prozess NICHT hängen:


private void Form1_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (previewHandlerHostControl != null)
            {
                previewHandlerHostControl.ReleaseCOMObject();
            }
        }

D.h. hat das Problem mit dem FormClosing-Event innerhalb der NAV - Applikation zu tun. (??)

Lösungvorschlag 2 aus den Blog-Kommentaren:

"Since altering my application to close down the Preview and then wait before calling PostQuitMessage(), the problem appears to have been completely resolved. I have really hammered it and so far the issue has not resurfaced, fingers-crossed."

Hat jemand eine Idee wie das mit C# umgesetzt werden kann?

Oder sonst eine Idee wie man das Problem lösen könnte?

49.485 Beiträge seit 2005
vor 10 Jahren
1.029 Beiträge seit 2010
vor 10 Jahren

Hi,

ich habe im Zusammenhang mit PreviewHandler mal einen guten CodeProject-Artikel gelesen,
in welchem ähnliches gemacht wurde.

Darin stand auch, dass es damit aus einem Grund immer wieder zu Problemen mit den Objekten kommen wird... Ich weiß leider nicht mehr wieso...

Die Lösung des Schreibers war, COM komplett zu umgehen.

Such dir den Artikel am besten mal... Preview Handler, bypass COM
sollten die richtigen Stichworte sein. Vielleicht hilft dir das 😕

LG