this person had과 같은 문제가 있습니다. 그러나 .Net 4.5를 사용하여 질문에 답을 얻었지만 .Net 4.0 만 있습니다..Net 4.0을 사용하여 Lock() 내에서 UI 스레드를 호출하는 방법
그래서 나는 this tutorial에 따라 내 자신의 비동기 세마포어를 생성하고 anwer 게시 한 사람의 추가 의견에 따라 내 코드 구현 :
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();
}
}
이 비록 나를 위해 작동하지 않습니다가, 바 병렬로 호출 .
비동기가 발생하기 전에 세마포어를 해제해야합니다. 이 모든 것 대신에'await'을 사용해야합니다. – SLaks
@SLaks : 나는 닷넷 4.5가 없다. – gartenriese
그런 다음 Microsoft.Bcl.Async를 사용하십시오. – SLaks