我的代码如下:
public override void Touch()
{
if ( System.Windows.Threading.Dispatcher.CurrentDispatcher.CheckAccess() )
{
TouchBase();
}
else
{
System.Windows.Application.Current.Dispatcher.BeginInvoke(
System.Windows.Threading.DispatcherPriority.Send,
(Action) (() => TouchBase()) );
}
}
我刚刚在 if 块(不是 else 块)中发生了崩溃,因为其中的某些事情必须在主线程上完成,并且调用堆栈清楚地表明这不是主线程,而是一个非托管 IOCP 线程。
所以我的问题是,从非托管线程或其他东西调用 CheckAccess() 是否不起作用?真的可以这么破吗?任何人都知道这里发生了什么。顺便说一句,这个问题很少发生,所以添加一些日志记录的建议并不是那么有用。