我正在尝试使用我拥有的变量的当前值(在另一个线程中运行)更新文本框:
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
发生变化以便随时反映当前值,我就可以触发该事件?
答案 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;
}