C# 框架代码中的InvalidAsynchronousStateException-我需要关心吗?
我有一个WPF应用程序,它有两个WinForms控件 偶尔,我会在C# 框架代码中的InvalidAsynchronousStateException-我需要关心吗?,c#,.net,wpf,multithreading,winforms,C#,.net,Wpf,Multithreading,Winforms,我有一个WPF应用程序,它有两个WinForms控件 偶尔,我会在.NET SystemEvents线程上遇到一些第一次机会InvalidAsynchronousStateException异常,这些异常总是被框架代码捕获(因此我只能在Visual Studio的输出窗口中看到它们) System.ComponentModel.InvalidAsynchronousStateException:“调用该方法时出错。目标线程不再存在。' 堆栈跟踪如下所示: > System.Window
.NET SystemEvents
线程上遇到一些第一次机会InvalidAsynchronousStateException
异常,这些异常总是被框架代码捕获(因此我只能在Visual Studio的输出窗口中看到它们)
System.ComponentModel.InvalidAsynchronousStateException:“调用该方法时出错。目标线程不再存在。'
堆栈跟踪如下所示:
> System.Windows.Forms.dll!System.Windows.Forms.WindowsFormsSynchronizationContext.Send(System.Threading.SendOrPostCallback, object)
System.dll!Microsoft.Win32.SystemEvents.SystemEventInvokeInfo.Invoke(bool, object[])
System.dll!Microsoft.Win32.SystemEvents.RaiseEvent(bool, object, object[])
System.dll!Microsoft.Win32.SystemEvents.OnUserPreferenceChanging(int, System.IntPtr, System.IntPtr)
System.dll!Microsoft.Win32.SystemEvents.WindowProc(System.IntPtr, int, System.IntPtr, System.IntPtr)
[Native to Managed Transition]
[Managed to Native Transition]
System.dll!Microsoft.Win32.SystemEvents.WindowThreadProc()
mscorlib.dll!System.Threading.ExecutionContext.RunInternal(System.Threading.ExecutionContext, System.Threading.ContextCallback, object, bool)
mscorlib.dll!System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, object, bool)
mscorlib.dll!System.Threading.ExecutionContext.Run(System.Threading.ExecutionContext, System.Threading.ContextCallback, object)
mscorlib.dll!System.Threading.ThreadHelper.ThreadStart()
异常总是在应用程序启动和运行时引发,而不是在启动时引发,因此主UI线程肯定是可用的
我需要关心吗?这是一个.NET Framework错误/功能,还是我的应用程序的错误/配置错误?
我很难理解是否出了什么问题。我看不到对我的应用程序有任何直接影响(没有死锁,没有崩溃,没有GUI故障),但谁知道呢
Windows 10、.NET Framework 4.7。我会在乎的……但那只是我。如果时间不是问题,我会尝试跟踪您的代码,看看它在哪里。@DavidBentley,这不在我的代码中。这是在框架代码中。即使异常是在框架中引发的,也有可能是使用框架的任何东西造成的。这可能是良性的,框架开发人员可以看到,但类似的一个很好的例子是调用
Window.Close
,然后再调用Window.Show
。您在表示框架中得到一个“隐藏”异常,但它本质上是由开发人员引起的。@DavidBentley,在本例中不是。如果查看堆栈跟踪,您会注意到整个序列在.NET系统事件线程上运行,并由操作系统事件触发。WindowsFormsSynchronizationContext
也由WinForms管理,不依赖于开发人员的代码。啊,是的。我猜它一定是在WPF中使用Winforms控件。您正在使用什么控件?我只在WPF中使用过WinForms中的系统托盘控件,从未见过这个错误。我会在乎的…但那只是我自己。如果时间不是问题,我会尝试跟踪您的代码,看看它在哪里。@DavidBentley,这不在我的代码中。这是在框架代码中。即使异常是在框架中引发的,也有可能是使用框架的任何东西造成的。这可能是良性的,框架开发人员可以看到,但类似的一个很好的例子是调用Window.Close
,然后再调用Window.Show
。您在表示框架中得到一个“隐藏”异常,但它本质上是由开发人员引起的。@DavidBentley,在本例中不是。如果查看堆栈跟踪,您会注意到整个序列在.NET系统事件线程上运行,并由操作系统事件触发。WindowsFormsSynchronizationContext
也由WinForms管理,不依赖于开发人员的代码。啊,是的。我猜它一定是在WPF中使用Winforms控件。您正在使用什么控件?我只在WPF中使用过WinForms中的系统托盘控件,从未见过此错误。