首页 诗词 字典 板报 句子 名言 友答 励志 学校 网站地图
当前位置: 首页 > 教程频道 > .NET > C# >

工作线程中,怎么更新窗体界面上的listbox

2012-01-11 
工作线程中,如何更新窗体界面上的listbox? //输出显示字符。publicvoidShowChar(charch){lock(this){textBo

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

热点排行