Ich habe das gleiche Problem wie this person had. Die Frage wurde jedoch mit .Net 4.5 beantwortet, aber ich habe nur .Net 4.0.Aufrufen von Methode auf UI-Thread von innerhalb einer Sperre() mit. NET 4.0
Also habe ich meine eigene asynchrone Semaphore basierend auf this tutorial und implementiert meinen Code basierend auf zusätzliche Kommentare der Typ, der anwer posted:
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();
}
}
Dies obwohl für mich nicht funktioniert, Bar parallel aufgerufen .
Sie geben das Semaphor frei, bevor das Async passiert. Sie sollten stattdessen 'erwarten' verwenden. – SLaks
@SLaks: Ich habe .Net 4.5 nicht. – gartenriese
Verwenden Sie dann Microsoft.Bcl.Async. – SLaks