我正在構建一個WPF應用程序,該應用程序調用Web服務並顯示在由我的應用程序分解和分析後從服務返回的數據。我面臨的問題是多線程。其中一個API調用是每60秒使用一次DispatcherTimer。問題是,當這個事件觸發時,它會阻塞UI線程。我嘗試過(以我能想到的所有方式)使用BackgroundWorker和Dispatcher對象(也是委託)從後臺線程更新UI,我無法弄清楚。我需要一個示例來顯示後臺線程正在更新的UI線程上的標籤。任何與此有關的幫助將是太棒了,因爲我正要嚇壞了:)。WPF多線程
我看了其他文章,它只是沒有讓我感覺可怕的數量。請耐心等待,因爲我對此很新穎。這是我想要做的一個例子。我在名爲lblCase的窗口上有一個標籤。我每60秒調用一次pullData(),我想用返回的數據更新lblCase而不會阻塞UI。
private void pullData()
{
//API call goes here...
lblCase.Content = iCase;
}
public MainWindow()
{
InitializeComponent();
DispatcherTimer timer = new DispatcherTimer();
timer.Tick += new EventHandler(timer_Tick);
timer.Interval = new TimeSpan(0,0,60);
timer.Start();
}
private void timer_Tick(object sender, EventArgs e)
{
pullData();
}
(我的)另一樣品,其確實很多類似的話: http://stackoverflow.com/questions/ 1794402 /異步等待,而-C-功能被執行的/ 1794947#1794947 伊恩的代碼是好一點,雖然;-)唯一的評論我會做的是,在匿名委託使用可變捕捉可以是一個當你第一眼看到它的時候,心靈就不會彎曲爲了讓代碼更加明顯一些,我會讓「worker」成爲MainWindow類的成員。 – donovan
好點,多諾萬和感謝您的親切話:) – kiwipom
感謝您的答覆,先生們。我將很快開始測試這些建議,並會讓你知道什麼對我有用。 – Joe