作成されたのと同じスレッドでイベントを処理しようとするこのシナリオがあります。これは一般的に UiThread で行われますが、私は最初から UiThread を使用していません。基本的に次の手順でいくつかのテストがあります。私はいくつかの詳細を省略しました。これが私が思うように動作するかどうかはよくわかりません。
まず、現在のスレッドの Id を確認します
var myThreadId = Thread.CurrentThread.ManagedThreadId;
私は SynchronizationContext を作成し、設定は最新のものです
var _context = new SynchronizationContext();
SynchronizationContext.SetSynchronizationContext(_context);
次に、コンテキストに何らかのアクションを送信します (現在、別のスレッドにいます)
_context.Send(x => _action(sender, e), null);
このアクション内で、ThreadId を再度確認します
Assert.Equal(myThreadId, Thread.CurrentThread.ManagedThreadId);
これは失敗します。元のスレッドに戻ってはいけないのでしょうか?