2

私はを使用してTimerいて、定期的なチェックを実行させています。テスト条件が真の場合、スレッドを開始して、スレッドに実行させる必要があります。

そのスレッド内で、使用しているUIを変更したい場合InvokeOnMainThread()。ただし、スレッドはTimerすでに別のスレッドであるからトリガーされたInvokeOnMainThread()ため、は実際のメインスレッドではなく、タイマーのスレッドで処理を呼び出します。InvokeOnMainThread()私は2つの呼び出しをボクシングすることによってそれを回避します。

これは意図したとおりに機能していますか、それともMonoフレームワークのバグですか?メインスレッドは、現在のスレッドをトリガーしたスレッドとして定義されていますか、それとも「ルート」スレッドを返すことになっていますか?

4

1 に答える 1

1

NSObject.InvokeOnMainThreadほとんどの場合、performSelectorOnMainThread:withObject:waitUntilDoneのラッパーです。

ドキュメントからの引用:

このメソッドを使用して、アプリケーションのメインスレッドにメッセージを配信できます。メインスレッドは、アプリケーションのメイン実行ループを包含し、NSApplicationオブジェクトがイベントを受信する場所です。

http://bugzilla.xamarin.comのバグレポートと自己完結型のテストケースを入力すると、詳細を調べることができます(奇妙に思えます) 。

于 2011-11-30T14:21:05.953 に答える