私は次のようなコードを持っています:
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() は、アンマネージ スレッドなどから呼び出されたときに機能しませんか? 本当にそんなに壊れるの?ここで何が起こっているのか、誰もが知っています。ところで、この問題はめったに発生しないため、ログを追加するという提案はあまり役に立ちません。