2011-06-07 3 views

ответ

0

Сгенерированный метод GetUserAsync должен возвращать IAsyncResult (see MSDN documentation). Вы можете использовать это для блокировки до завершения операции:

IAsyncResult asyncResult = Service.WebService.GetUserAsync(UserId); 
asyncResult.AsyncWaitHandle.WaitOne(); 
+0

Я пробовал это уже, но я не могу использовать GetUserAsync из типа void в IAsyncResult – Tony

+1

Работаете ли вы с прокси-сервером, созданным для Silverlight? –

0

Хорошо, я попытался сделать это по-другому. Вместо того, чтобы ждать ответа службы, я попросил его обратиться к интерфейсу, над которым я работал.

public class Person : INotifyPropertyChanged 
{ 
    //Calling the service to get the object needed 
    private string personname 
     public string PersonName 
     { 
      get { 
       return personname; 
      } 
      set { 
       personname = value; 
       NotifyPropertyChanged("PersonName"); 
      } 
     } 

     private void NotifyPropertyChanged(string property) 
     { 
      if (PropertyChanged != null) 
      { 
       PropertyChanged(this, new PropertyChangedEventArgs(property)); 
      } 
     } 

     public event PropertyChangedEventHandler PropertyChanged; 

     public void LoadMembersName() 
     { 
      ServiceSoapClient serviceClient = new ServiceSoapClient() {}; 
      serviceClient.GetMembersNameCompleted += (sender, e)=>{ 
      PersonName = e.Result 
     } ; 
    } 
} 

Теперь на интерфейсе нам просто необходимо загрузить имя человека и выполнять операции, после того, как событие изменения свойств триггеров.

void Page_Load (object sender, EventArgs e) 
{ 
    Person per = new Person(); 
    per.PropertyChanged += (sender,e) => 
    { 
     //Your code here 
     Response.Write(per.PersonName); 
    }; 
    per.LoadMembersName(); 
} 

Мне очень жаль. Я тоже скопировал код из какого-то источника, но я упустил ссылку.

Смежные вопросы