簡體   English   中英

來自計時器線程的WPF UI更新

[英]WPF UI update from a timer thread

在App I中,顯示隨時間推移或用戶點擊下一個/上一個時旋轉的橫幅。

1)我需要更新Timer.Elapsed方法中的UI元素。 根據我的發現,似乎計時器滴答在他們自己的線程上執行,元素的調度程序應該用於更新UI。

( (Image)BannerPanel.Content ).Dispatcher.Invoke( new Action( () => {
    ( (Image)BannerPanel.Content ).Source = GetImage( new Uri( banner.Uri, UriKind.Absolute ) );
} ) );

但是會拋出InvalidOperationException

2)橫幅控制器提供NextPrevious方法,分別稱為顯示下一個/上一個橫幅。 DisplayBanner方法嘗試顯示橫幅時,當找不到文件時,它會嘗試使用WebClientAsyncFileDownload重新下載它,而在DownloadComplete它會顯示圖像。 我是否正確假設兩個,由定時器觸發的ElapsedNext / Previous手動調用可以同時發生,兩者都在他們自己的線程Previous運行(UI線程上的上Previous / Next和定時器線程上的Elapsed ),可能導致不穩定?

您應該考慮使用DispatcherTimer類而不是常規Timer 它被設計為與WPF UI一起用於這些類型的用途,因為它在Dispatcher線程上運行。

更多信息: System.Windows.Threading.DispatcherTimer

嘗試使用Application,

Application.Current.Dispatcher.Invoke(new Action(() => 
{
    ((Image)BannerPanel.Content).Source = GetImage(new Uri(banner.Uri, UriKind.Absolute));
});

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM