Hallo zusammen,
im Rahmen der Integration von List&Label in unsere CRM-Anwendung (C#/.NET) ist mir ein unschönes Phänomen aufgefallen: wenn man ein Fenster schließt, auf dem ein DesignerControl liegt, das aktuell noch seine Vorschau berechnet (weil Tabelle vielen Daten), dann blockiert der GUI-Thread mit folgenden Stacktrace:
S.W.F.UnsafeNativeMethods.DestroyWindow(System.Runtime.InteropServices.HandleRef hWnd)
S.W.F.NativeWindow.DestroyHandle()
S.W.F.Control.DestroyHandle()
S.W.F.Form.ShowDialog(System.Windows.Forms.IWin32Window owner)
Wenn man jedoch die Vorschauberechnung als Benutzer manuell abbricht oder komplett durchlaufen lässt, dann ist alles gut und beim Schließen des Fensters mit dem DesignerControl blockiert der GUI-Thread nicht.
Meine Frage:
Wie kann ich beim Schließen des Fensters das DesignerControl so “töten”, dass eine eventuell noch laufende Vorschauberechnung den GUI-Thread nicht blockiert? Kann ich die Vorschauberechnung programmatisch abbrechen?
Was ich schon probiert habe:
EventHandler für das Form.Closing-Ereignis mit Abfrage auf DesignerControl.CanClose. Diese Methode liefert leider in dem obigen Szenario (Vorschauberechnung läuft) immer den Wert true.
Umgebung:
List&Label 23.0.6501.37264
C# / .NET 4.0/4.5.2
Windows 10
Gruß,
Stephan Müller.