簡體   English   中英

動態創建的文本框上的C#線程安全文本更新

[英]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.

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