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

时间:2015-01-19 01:29:30

标签: c# multithreading events timer textbox

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

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发生变化以便随时反映当前值,我就可以触发该事件?

2 个答案:

答案 0 :(得分:1)

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

当Form.Invoke()处理我们运行的表单的UI线程时,它会处理同步更改。

声明更新委托

public delegate void UpdateTextBoxDelegate(int value);

在load_form

中启动你的线程
Thread thread = new Thread(new ThreadStart(UpdateTextBoxThread));
thread.Start();

线程方法。 Invoke是表单类中的一个方法,因此如果您将线程方法放在另一个类中,则可能需要将表单对象的实例传递给线程类。

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();
}

答案 1 :(得分:0)

我想到的第一件事就是制作一个隐藏的标签并添加text_change的功能

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