[英]C# thread safe text update on dynamically created text boxes
我知道如何在已定義的文本框上進行線程安全更新http://msdn.microsoft.com/en-us/library/ms171728.aspx ....如何在文本框上執行此操作后來在程序中生成? 你的建議非常感謝。
給定一些TextBox
對象,只需調用它:
TextBox foo = new TextBox(...);
// Code to add the new box to the form has been omitted; presumably
// you do this already.
Action update = delegate { foo.Text = "Changed!"; };
if (foo.InvokeRequired) {
foo.Invoke(update);
} else {
update();
}
如果您經常使用此模式,則此擴展方法可能會有所幫助:
public static void AutoInvoke(
this System.ComponentModel.ISynchronizeInvoke self,
Action action)
{
if (self == null) throw new ArgumentNullException("self");
if (action == null) throw new ArgumentNullException("action");
if (self.InvokeRequired) {
self.Invoke(action);
} else {
action();
}
}
然后,您可以將代碼減少到:
foo.AutoInvoke(() => foo.Text = "Changed!");
這將是正確的事情,在主GUI線程上執行委托,無論您當前是否正在其上執行。
我們在這里肯定需要更多的信息,但是從我可以收集到的信息來看,你感到遺憾的是線程的主要功能沒有任何參數。 您可以創建周圍類的文本框成員,並以這種方式訪問它們。 如果你走這條路,請務必使用互斥鎖或其他鎖定設備進行線程。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.