0

我對wp7開發並不陌生,目前正在開發一個應用程序,該應用程序具有後臺代理以根據從Web調用到api的響應更新值。如何在後臺代理中進行同步Web呼叫

我的問題是,對Web調用的響應是異步調用,我無法訪問從後臺代理返回的結果。

有沒有什麼辦法可以在後臺代理中進行同步調用,以便我可以在同一個代理中處理結果?

我已經嘗試處理共享庫中類中的Web調用,但異步調用僅在代理的onInvoke方法完成後纔會生成,因此無用。任何想法都會很棒。

回答

1

您只需在異步調用的完成處理程序中調用NotifyComplete()方法,而不是之前。在調用結束時刪除調用。

0

你可以使用像這樣的的AutoResetEvent:

protected override void OnInvoke(ScheduledTask task) 
{ 
    AutoResetEvent are = new AutoResetEvent(false); 

    //your asynchronous call, for example: 
    WebClient wc = new WebClient(); 
    wc.OpenReadCompleted += new OpenReadCompletedEventHandler(wc_OpenReadCompleted); 
    wc.OpenReadAsync(searchUri, channel); 

    // lock the thread until web call is completed 
    are.WaitOne(); 

    //finally call the NotifyComplete method to end the background agent 
    NotifyComplete(); 
} 

和您的回調方法應該是這樣的:

void wc_OpenReadCompleted(object sender, OpenReadCompletedEventArgs e) 
{ 
    //do stuff with the web call response 

    //signals locked thread that can now proceed 
    are.Set(); 
} 

記住,你應該檢查一下連接可用並處理可能的例外,如果你的後臺代理會連續被殺兩次(由於內存消耗或持續時間),它將被操作系統禁用。