2011-10-20 77 views
1

關閉Guide.BeginShowMessageBox我正在Windows Phone 7上運行異步Web請求,並且我希望用戶能夠在需要太長時間的情況下取消請求。我通過調用顯示一個消息框:如何從代碼

IAsyncResult result = Guide.BeginShowMessageBox("Synchronize", "Synchronizing with MyWebsite.com...", new string[] { "Cancel" }, 0, MessageBoxIcon.None, OnEndDialog, null); 

在OnEndDialog回調,我可以取消該請求,工作正常。

但是,當請求完成後,我想關閉我的代碼中的消息框。不幸的是,當我打電話

Guide.EndShowMessageBox(result); 

從我的代碼(是的,我用dispatcher.BeginInvoke運行在UI線程調用),它原來是一個阻塞調用,對話框仍在等待用戶按下取消按鈕。

有沒有什麼辦法可以從代碼關閉消息框?

回答

0

我想這是不可能從代碼關閉指導消息框。

我使用來自Coding4Fun Windows Phone Toolkit的MessagePrompt控件解決了問題。您可以調用OnCompleted(...)關閉消息框。

我添加了一個辭退方法基類(UserPrompt),它可以從後臺線程可以稱爲:

public void Dismiss(PopUpResult result) 
    { 
     // Dismiss can be called from any thread. Make sure to execute on UI thread: 
     Dispatcher dispatcher = Deployment.Current.Dispatcher; 
     if (dispatcher.CheckAccess()) 
     { 
      OnCompleted(new PopUpEventArgs<string, PopUpResult> { PopUpResult = result }); 
     } 
     else 
     { 
      dispatcher.BeginInvoke((Action)(() => { Dismiss(result); })); 
     } 
    }