2011-05-20 124 views
1

我正在調用一個Web服務的異步。由於它可能需要幾秒鐘,所以有一個狀態標籤用於讓用戶知道發生了什麼。但即使呼叫是異步的,第一個呼叫似乎會阻塞幾秒鐘,而狀態標籤需要很長時間才能更新。在WinForms中,我可以強制刷新標籤(使用Update()我認爲),但不是在WPF中。任何超級簡單的方法來得到這個工作?需要強制刷新WPF標籤

感謝, 格里

回答

0

我(瘋狂)猜測,阻塞是由於服務代理類的創建/初始化。如果是這樣,您可以嘗試更早地創建代理,或者在另一個線程中調用異步Web服務。

關於刷新控件的問題的一般答案......我一直依靠數據綁定來做到這一點。這不會幫助,雖然如果主要的UI線程停滯不前。如果UI線程卡住了,我不知道有什麼辦法可以繪製它。

1

您可以將整個調用邏輯移動到QueueWorkUserItem或BackgroundWorker塊中。這樣,第一次代理初始化不會阻塞UIThread(在異步開始/結束模式開始之前)。假設你正在使用數據綁定對象來暴露綁定到Label實現INotifyPropertyChanged的屬性,所有事情都應該自動發生。

0

有沒有辦法告訴標籤刷新,實際上在你的情況下工作。如果UI被阻止,它將不會刷新。基本上,當你真正到達更新標籤文本的位置時,它將顯示在WPF中。我可以想到的唯一可能的例外是,如果您使用的是非WPF控件,但即使如此,它也應該可以工作。

我的建議是更新標籤,然後再執行第一個操作(甚至在變量初始化之前,因爲這可能是問題實際存在的地方)。這裏是一個僞代碼的例子,我的意思是(以防萬一我不清楚):

private void KickOffProcess() 
{ 
    label1.Text = "Processing ..."; //This is where you need to move the label update code 
    AsyncCall(); 
}