2012-11-24 76 views
6

我的應用程序出現了一些問題。
我想每10秒更新一次我的UI。我首先使用了DispatcherTimer,但它會在短時間內阻止我的用戶界面,因爲更新方法需要從網絡加載某些內容,並且此操作需要一些時間。 現在我想到了某種背景工作者,我發現了BackgroundTasks。
問題與後臺任務是,據我理解正確的話,那他們應該作爲,即使應用程序暫停更新程序。我不需要那個。 我只想更新,如果我的應用程序正在運行,而不是暫停。後臺計時器更新用戶界面?

有沒有辦法解決這個問題的好辦法? 有什麼建議使用這個?

在此先感謝!

+0

我不認爲這有什麼不妥,使用後臺工作這一點。它不應該導致你任何問題,但如果你不想使用它,你可以使用線程,這基本上是後臺工作者做的一些添加。查看我的答案,瞭解如何做到這一點。 – FrostyFire

+0

初學者,你有什麼嘗試?你可以啓動一個線程並跳舞。請參閱:1. http://msdn.microsoft.com/en-us/library/aa645740%28v=vs.71%29.aspx 2. http://msdn.microsoft.com/en-us/library/ms173178 %28V = VS.80%29.aspx 3. https://www.google.ca/#hl=en&sugexp=les%3B&gs_nf=3&tok=BSvnKvGpLPeMsccfqVbvVQ&cp=9&gs_id=bz&xhr=t&q=thread+c%23&pf=p&tbo=d&sclient = PSY-AB和OQ =螺紋+ C%23&gs_l =&PBX = 1&BAV = on.2,or.r_gc.r_pw.r_cp.r_qf。&FP = d74e08ea70650bbd&BPCL = 38897761&BIW = 1280&波黑= 892 4. http://msdn.microsoft.com/ en-us/library/system.threading.thread.aspx 5. http://msdn.microsoft.com/en-us/library/ms173178。 –

回答

11

你需要爲它兩件事情:

  1. 定時器

    您可以System.Timers.Timer與間隔10秒更新UI。

  2. 調度

    您需要使用Dispatcher.Invoke更改UI未持有主UI線程。應該在單獨線程Timer方法)上調用方法Process,而不是主UI線程,並使用Dispatcher來提醒主UI線程進行更改。

    Process() // method to be called after regular interval in Timer 
    { 
        // lengthy process, i.e. data fetching and processing etc. 
    
        // here comes the UI update part 
        Dispatcher.Invoke((Action)delegate() { /* update UI */ }); 
    } 
    
+0

System.Timers.Timer不能用來更新用戶界面,你嘗試過嗎?這是他們在MSDN中編寫的內容,但我還沒有嘗試過:如果使用帶有用戶界面元素(如窗體或控件)的System.Timers.Timer類,而不將定時器放置在該用戶界面元素上,窗體或控件包含定時器到SynchronizingObject屬性,以便將事件封送到用戶界面線程。 https://msdn.microsoft.com/en-us/library/system.timers.timer(v=vs.110).aspx –

+0

我試過了,它的工作你必須添加下面的代碼行來分配表單作爲同步對象t.SynchronizingObject =(this); –

0

此外,您可以啓動一個定時器,其中有一個經過的事件,每出現一個計時器經過一定的時間週期。

  1. http://www.dotnetperls.com/timer
2

你需要創建一個用於運行代碼,獲取並處理來自網站上的信息的一部分線程。這樣,您的表單將毫不猶豫,因爲它將處於與處理部分不同的線程中。

This的代碼項目文章應該讓你開始。