У меня такая же проблема, как и у this person had. Однако на вопрос был дан ответ, используя .Net 4.5, но у меня только .Net 4.0.Вызов метода для потока пользовательского интерфейса изнутри Lock() с .Net 4.0
Так что я создал свой собственный асинхронный семафор на основе 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: У меня нет .Net 4.5. – gartenriese
Затем используйте Microsoft.Bcl.Async. – SLaks