[英]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)橫幅控制器提供Next
和Previous
方法,分別稱為顯示下一個/上一個橫幅。 當DisplayBanner
方法嘗試顯示橫幅時,當找不到文件時,它會嘗試使用WebClient
的AsyncFileDownload
重新下載它,而在DownloadComplete
它會顯示圖像。 我是否正確假設兩個,由定時器觸發的Elapsed
和Next
/ Previous
手動調用可以同時發生,兩者都在他們自己的線程Previous
運行(UI線程上的上Previous
/ Next
和定時器線程上的Elapsed
),可能導致不穩定?
您應該考慮使用DispatcherTimer
類而不是常規Timer
。 它被設計為與WPF UI一起用於這些類型的用途,因為它在Dispatcher
線程上運行。
嘗試使用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.