ソフトウェアの GUI スレッドを担当しています。基になる API から常にポーリングする必要がある GridView データ内に表示する必要があります。データを更新するというメソッドを作成し、and/orSync()
を使用してスレッド セーフにしようとしました。このメソッドは、約 5 秒ごとにタイマーによって呼び出されます。BeginInvoke
Invoke
Sync
の本体がSync
呼び出されることはありません。何らかの理由で、私の要求がメッセージ ポンプから取り出されないように見えるからです。コード:
public void Sync()
{
if (this.InvokeRequired)
{
logger.Debug("Begin Invoke of Sync operation");
this.Invoke(new SyncDelegate(Sync));
logger.Debug("End Invoke of Sync operation");
}
else
{
logger.Debug("Inside body");
}
}
ログは次のようになります。
10:00:00 Begin Invoke of Sync operation
... other stuff ...
10:00:05 Begin Invoke of Sync operation
... other stuff ...
10:00:10 Begin Invoke of Sync operation
他のメッセージは印刷されません。
についても同じですBeginInvoke
。「End Invoke ...」は出力されますが、「inside body ...」は出力されません。
Unity3D と MonoDevelop の上で実行しています (これで何かが変わる場合)。