使用当前变量值更新文本框

Updating a Textbox with current variable value

我正在尝试使用我拥有的变量(运行 在另一个线程中)的当前值更新文本框:

myTimer = new System.Windows.Forms.Timer();
myTimer.Interval = 1000;
myTimer.Tick += new EventHandler(myTimerElapsed);
myTimer.Start();


private void myTimerElapsed(object sender, System.EventArgs eventArgs)
{
    myTextBox.Text = Convert.ToString(myThread.myValue);
}

每 1 秒更新一次文本框。我的问题是是否有更好的方法可以不使用计时器来做到这一点?例如,每当 myValue 更改以始终反映当前值时我可以触发的事件?

使用 form.invoke(),您可以直接从线程更新文本框。

Form.Invoke() 在可以通过表单我们 运行 所在的 UI 线程时处理同步更改。

声明更新委托

public delegate void UpdateTextBoxDelegate(int value);

在 load_form

中开始您的话题
Thread thread = new Thread(new ThreadStart(UpdateTextBoxThread));
thread.Start();

线程方法。 Invoke 是表单 class 中的一个方法,因此如果您的线程方法位于不同的 class.[= 中,您可能需要将表单对象的实例传递给线程 class 14=]

public void UpdateTextBoxThread()
{
    for(int loop = 0; loop < 1000; loop++)
    {
        //Invoke the delegate within the UI thread context 
        Invoke(new UpdateTextBoxDelegate(InvokeUpdateTextBox), loop);
    }
}

在 UI 线程上下文中更新文本框的辅助方法

public void InvokeUpdateTextBox(int loop)
{
    textBox1.Text = loop.ToString();
}

我第一个想到的就是做一个隐藏标签,加上text_change

的功能
    private void lblMyValue_TextChanged(object sender, EventArgs e)
    {
          myTextBox.Text = lblMyValue.Text;
    }