工作线程中,如何更新窗体界面上的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;
}
}