Laden...

WinForms erzeugt WPF InvalidOperationException

Erstellt von Cryten vor 5 Jahren Letzter Beitrag vor 5 Jahren 1.769 Views
C
Cryten Themenstarter:in
2 Beiträge seit 2018
vor 5 Jahren
WinForms erzeugt WPF InvalidOperationException

Guten Tag,

ich hoffe ich bin hier richtig. Ich habe ein Problem und komme einfach nicht weiter. Vielleicht hat ja jemand einen Tipp oder hatte ähnliches.

Unsere Firmenanwendung läuft auf Cobol darüber rufen wir via COM im DotNet Winforms Fenster auf. Wir sind gerade dabei alles abzulösen und zu Modernisieren(WPF/MVVM).

Unsere Anwendung funktioniert tadellos. Nur in Verbindung mit WPF macht uns Winforms einen Strich durch die Rechnung.

Testen wir unsere Anwendung mit WPF funktioniert diese Tadellos, sobald wir aber ein Winforms kurz öffnen und schließen, meldet die WPF nach dem öffnen und klicken auf z.B ein Datagrid sofort eine InvalidOperationException und unsere Anwendung schmiert ab ohne eindeutigen Fehlercode, halt nur die -> InvalidOperationException.

Irgendwas muss da doch nicht glatt laufen.

Vielleicht hat ja wer eine Idee woran es liegen könnte. Code bzw teile davon darf ich leider nicht veröffentlichen. 😠

MfG Cryten 🙂

78 Beiträge seit 2016
vor 5 Jahren

Schwieriger Fall.

Prüf mal folgendes:

  • Läuft der Call im STA oder im MTA?
  • Wird der Call nach WPF im Main-Thread dispatched (prüf den SynchronizationContext) ?
  • Ist das wirklich ein COM-Problem oder kannst du den Fehler isoliert (ohne Cobol und COM) reproduzieren?
  • Nutze WinDbg und die SOS-Extension um mehr vom CallStack zu sehen

http://dotnet-paderborn.azurewebsites.net/

W
955 Beiträge seit 2010
vor 5 Jahren
  • Nutze WinDbg und die SOS-Extension um mehr vom CallStack zu sehen Anleitung
C
Cryten Themenstarter:in
2 Beiträge seit 2018
vor 5 Jahren

Prüf mal folgendes:

  • Läuft der Call im STA oder im MTA?
  • Wird der Call nach WPF im Main-Thread dispatched (prüf den SynchronizationContext) ?
  • Ist das wirklich ein COM-Problem oder kannst du den Fehler isoliert (ohne Cobol und COM) reproduzieren?
  • Nutze WinDbg und die SOS-Extension um mehr vom CallStack zu sehen

Läuft im STA
Ja wird dispatched
Ist kein Com-Problem auch Isoliert ohne Cobol und COM tritt das Problem auf.
Mit WinDbg nichts auffälliges gefunden, SOS-Extension steht noch aus.

LG Cryten

PS: Danke für eure Hilfe 😃

STACK:

Fehlermeldung:
System.Transactions Critical: 0 : <TraceRecord xmlns="http://schemas.microsoft.com/2004/10/E2ETraceEvent/TraceRecord" Severity="Critical"><TraceIdentifier>
>
</TraceIdentifier><Description>Unbehandelte Ausnahme</Description><AppDomain>DefaultDomain</AppDomain><Exception><ExceptionType>System.InvalidOperationException, mscorlib, Version=4.0.0.0, Culture=neutral, PublicKeyToken=b77a5c561934e089</ExceptionType><Message>Der aufrufende Thread kann nicht auf dieses Objekt zugreifen, da sich das Objekt im Besitz eines anderen Threads befindet.</Message><StackTrace> bei System.Windows.Threading.Dispatcher.VerifyAccess()
bei System.Windows.DependencyObject.GetValue(DependencyProperty dp)
bei System.Windows.Controls.Primitives.ButtonBase.get_Command()
bei System.Windows.Controls.Primitives.ButtonBase.UpdateCanExecute()
bei System.Windows.Controls.Primitives.ButtonBase.OnCanExecuteChanged(Object sender, EventArgs e)
bei System.Windows.Input.CanExecuteChangedEventManager.HandlerSink.OnCanExecuteChanged(Object sender, EventArgs e)
bei Prism.Commands.DelegateCommandBase.&amp;lt;&amp;gt;c__DisplayClass8_0.&amp;lt;OnCanExecuteChanged&amp;gt;b__0(Object o)
bei System.Threading.QueueUserWorkItemCallback.WaitCallback_Context(Object state)
bei System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
bei System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
bei System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem()
bei System.Threading.ThreadPoolWorkQueue.Dispatch()
bei System.Threading._ThreadPoolWaitCallback.PerformWaitCallback()</StackTrace><ExceptionString>System.InvalidOperationException: Der aufrufende Thread kann nicht auf dieses Objekt zugreifen, da sich das Objekt im Besitz eines anderen Threads befindet.
bei System.Windows.Threading.Dispatcher.VerifyAccess()
bei System.Windows.DependencyObject.GetValue(DependencyProperty dp)
bei System.Windows.Controls.Primitives.ButtonBase.get_Command()
bei System.Windows.Controls.Primitives.ButtonBase.UpdateCanExecute()
bei System.Windows.Controls.Primitives.ButtonBase.OnCanExecuteChanged(Object sender, EventArgs e)
bei System.Windows.Input.CanExecuteChangedEventManager.HandlerSink.OnCanExecuteChanged(Object sender, EventArgs e)
bei Prism.Commands.DelegateCommandBase.&amp;lt;&amp;gt;c__DisplayClass8_0.&amp;lt;OnCanExecuteChanged&amp;gt;b__0(Object o)
bei System.Threading.QueueUserWorkItemCallback.WaitCallback_Context(Object state)
bei System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
bei System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
bei System.Threading.QueueUserWorkItemCallback.System.Threading.IThreadPoolWorkItem.ExecuteWorkItem()
bei System.Threading.ThreadPoolWorkQueue.Dispatch()
bei System.Threading._ThreadPoolWaitCallback.PerformWaitCallback()</ExceptionString></Exception></TraceRecord>
(6878.1aa8): CLR exception - code e0434352 (!!! second chance !!!)
eax=0a2ff7a0 ebx=00000005 ecx=00000005 edx=00000000 esi=0a2ff860 edi=00000001
eip=7593d722 esp=0a2ff7a0 ebp=0a2ff7f8 iopl=0 nv up ei pl nz ac pe nc
cs=0023 ss=002b ds=002b es=002b fs=0053 gs=002b efl=00000216
KERNELBASE!RaiseException+0x62:
7593d722 8b4c2454 mov ecx,dword ptr [esp+54h] ss:002b:0a2ff7f4=1741bbad
0:007> t
WARNING: Continuing a non-continuable exception
eax=0a2ff7a0 ebx=00000005 ecx=1741bbad edx=00000000 esi=0a2ff860 edi=00000001
eip=7593d726 esp=0a2ff7a0 ebp=0a2ff7f8 iopl=0 nv up ei pl nz ac pe nc
cs=0023 ss=002b ds=002b es=002b fs=0053 gs=002b efl=00000216
KERNELBASE!RaiseException+0x66:
7593d726 33cc xor ecx,esp

78 Beiträge seit 2016
vor 5 Jahren

Fehlermeldung:
Der aufrufende Thread kann nicht auf dieses Objekt zugreifen, da sich das Objekt im Besitz eines anderen Threads befindet.

Die Fehlermeldung deutet auf ein Thread-Problem hin. Irgendwas wird nicht im UI-Thread dispatched.

http://dotnet-paderborn.azurewebsites.net/