[英]Access object created by another thread without invoking every time?
我有一個簡單的狀態標簽,在長時間運行的例程中經常更新。 該例程位於計時器上,因此位於另一個線程上,因此我得到了Cross-thread operation not valid
錯誤。 我找到了一個SO修復程序,看起來像這樣:
lblQuery1Status.Invoke(new Action(delegate
{
lblQuery1Status.Text = "Status: Publishing";
}));
但是,我在例行程序中將此控件的文本更新了7或8次。 有沒有更有效或更簡單的方法來做到這一點?
如果要“簡化”語法,則始終可以使用內聯lambda來“縮短”語法:
lblQuery1Status.Invoke(new Action(() => lblQuery1Status.Text = "Status: Publishing"));
您還可以為調用創建操作變量,並在需要時重新調用該操作:
Action updateStatus = () =>
lblQuery1Status.Invoke(new Action(() => lblQuery1Status.Text = "Status: Publishing"));
然后,您可以根據需要多次調用它作為一種方法:
updateStatus();
不幸的是,這是從長時間運行的任務/線程向UI線程獲取數據的最佳方法,編組有其開銷,但除非您每秒調用數百次,否則我認為會很好的😊
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.