2012-10-24 5 views
6

thể trùng lặp:
Why does ManualResetEvent fail to work in this synchronous call using Silverlight 4?ManualResetEvent là không làm việc với WCF và Silverlight

Tôi có một mã dưới đây trong 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 có mã bên dưới.

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

Cho đến khi hoàn thành DoWork Tôi muốn mã của mình chờ vì vậy tôi đã viết mã này. Mặc dù sau khi WaitOne hướng dẫn (Service1.svc.cs) phương pháp DoWork() sẽ không được gọi là ở tất cả. Ứng dụng sẽ ở lại đó chỉ không làm bất cứ điều gì. Tôi đã làm việc về điều này trước khi trong một máy khác trong SilverLight 4 và nó đã làm việc như mong đợi. Bây giờ tôi đang sử dụng SilverLight 3.

Trả lời

0

Có thể bạn đang gây ra một bế tắc bế tắc trên chuỗi giao diện người dùng bằng cách gọi wait.WaitOne().

Khi hoàn thành thao tác không đồng bộ, nó sẽ cố gắng gọi số DoWorkCompleted thông qua trình điều phối giao diện người dùng. Mặc dù nó sẽ xếp hàng thành công lời gọi, nó sẽ không bao giờ khử nhiễu vì chuỗi giao diện người dùng bị chặn trên WaitOne().

Theo ý kiến ​​của tôi, bạn nên tránh cách này và chỉ thực hiện các cuộc gọi không đồng bộ.

+0

Eren Tôi đã tạo ứng dụng hoàn toàn mới và đã thử cùng một ứng dụng vẫn không hoạt động. Tôi đang sử dụng ứng dụng điều hướng. – Shrivallabh