Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/269.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# ManualResetEvent不适用于WCF和silverlight_C#_Multithreading_Wcf_Silverlight - Fatal编程技术网

C# ManualResetEvent不适用于WCF和silverlight

C# ManualResetEvent不适用于WCF和silverlight,c#,multithreading,wcf,silverlight,C#,Multithreading,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

可能重复:

我在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。

调用
wait.WaitOne()
可能会导致UI线程死锁

异步操作完成后,它会尝试通过UI调度程序调用
DoWorkCompleted
。尽管它将成功地将调用排队,但它永远不会退出队列,因为UI线程在
WaitOne()
上被阻塞


在我看来,您应该避免这种变通方法,只进行异步调用

我创建了一个全新的应用程序,并尝试了同样的应用程序,但仍然不起作用。我正在使用导航应用程序。