2012-10-24 60 views
6

可能重複:
Why does ManualResetEvent fail to work in this synchronous call using Silverlight 4?ManualResetEvent的不與WCF和Silverlight工作

我在MainPage.xaml.cs中一個下面的代碼

ManualResetEvent wait = new ManualResetEvent(false); 
Service1Client wcf = new Service1Client(); 
wcf.DoWorkCompleted += (o, ev) => 
{ 
    int s = (int)ev.Result; 
    wait.Set(); 
}; 
wcf.DoWorkAsync(); 
wait.WaitOne(); 

//My other part of code where I'd like the value of `int s`. 
.... 

Service1.svc .cs的代碼如下。

public class Service1 : IService1 
{ 
    public int DoWork() 
    { 
    return 5; 
    } 
} 

截至本DoWork完成我希望我的代碼等待,所以我寫了這個代碼。雖然WaitOne指令(Service1.svc.cs)方法DoWork()完全不會被調用。應用程序將停留在那裏只是不做任何事情。我之前在SilverLight 4的另一臺機器上工作過,並且按預期工作。現在我正在使用SilverLight 3.

回答

0

您可能會通過調用wait.WaitOne()在UI線程上導致死鎖

當異步操作完成時,它會嘗試通過UI調度程序調用DoWorkCompleted。雖然它會成功排隊調用,但它永遠不會退出,因爲UI線程在WaitOne()上被阻止。

在我看來,你應該避免這種解決方法,只是做異步調用。

+0

Eren我創建了全新的應用程序,並嘗試相同的仍然無法正常工作。我正在使用導航應用程序。 – Shrivallabh