日期:2014-05-18  浏览次数:20834 次

工作线程中,如何更新窗体界面上的listbox?

//   输出显示字符。
public   void   ShowChar(char   ch)
{
lock(this)
{
textBox1.Text   +=   ch;
}
}

上述代码在VS2005中,调试时总是弹出对话框,提示Cross   Thread   Operation   ....什么的,导致无法调试。
但是如果直接点击exe执行起来又是好的。

不知道应该怎么做,才能避免这种提示?
有没有规范的写法?



------解决方案--------------------
使用Invoke来执行方法:

private void button2_Click(object sender, EventArgs e)
{
Thread th = new Thread(aa);
th.Start();
}

delegate void somedle();
private void aa()
{
if (this.InvokeRequired)
{
somedle sd = new somedle(aa);
this.Invoke(sd);
return;
}
ShowChar( 'A ');
}
public void ShowChar(char ch)
{
lock (this)
{
textBox1.Text += ch;
}
}

------解决方案--------------------
#region 设置节点的数据
delegate void SetNodeValuesDelegate(TreeNode node, TreeItem item);
/// <summary>
/// 设置节点的数据
/// </summary>
/// <param name= "node "> </param>
/// <param name= "item "> </param>
private void SetNodeValues(TreeNode node, TreeItem item)
{
if (treeView1.InvokeRequired)
{
treeView1.Invoke(new SetNodeValuesDelegate(SetNodeValues), node, item);
return;
}
}