私はthis person hadと同じ問題があります。しかし、質問は.Net 4.5を使って答えられましたが、私は.Net 4.0しか持っていません。.Net 4.0でLock()内からUIスレッドを呼び出すメソッド
private void Foo()
{
try
{
Semaphore.WaitAsync().ContinueWith(previousTask =>
{
if (Dispatcher.FromThread(Thread.CurrentThread) != null)
{
Bar();
}
else
{
Application.Current.Dispatcher.Invoke(new Action(() => Bar()));
}
});
}
finally
{
Semaphore.Release();
}
}
これはしかし私のために動作しません、バーを並列に呼び出されます。だから私はthis tutorialに基づいて自分の非同期セマフォを作成し、anwerを掲載男の追加のコメントに基づいて私のコードを実装し
。
非同期が発生する前にセマフォを解放しています。あなたはすべてのものの代わりに 'await'を使うべきです。 – SLaks
@SLaks:私は.Net 4.5を持っていません。 – gartenriese
次に、Microsoft.Bcl.Asyncを使用します。 – SLaks