C#关于多线程控制控件,求大神指导
delegate void AddMessageToListBoxDelegate(string str);public void AddMessageToListbox(string str)
{
if (listBox1.InvokeRequired)
{
AddMessageToListBoxDelegate d = AddMessageToListbox;
listBox1.Invoke(d, str);//三个参数为 委托实例 委托的参数
}
else
{
listBox1.Items.Add(str);
listBox1.SelectedItem = listBox1.Items.Count - 1;
listBox1.ClearSelected();
}
}
调试运行的时候,listbox1.item.add已经执行了,但是在界面上面,显示不了已经添加的信息,求哪位大神给看一下是什么原因 --------------------编程问答-------------------- 为什么要这样写呢?搞不懂.
直接这样不就行了:
在构造函数里加个 Form.CheckForIllegalCrossThreadCalls = false;
delegate void AddMessageToListBoxDelegate(string str);
public void AddMessageToListbox(string str)
{
this.listbox1.items.add(str);
}
调用的时候:AddMessageToListBoxDelegate addtoList=new AddMessageToListBoxDelegate(AddMessageToListbox);
addtoList(str,null,null);
--------------------编程问答-------------------- AddMessageToListBoxDelegate d = AddMessageToListbox;
listBox1.Invoke(d, str);//三个参数为 委托实例 委托的参数
改为
AddMessageToListBoxDelegate d = new AddMessageToListBoxDelegate (AddMessageToListbox);
this.Invoke(d, new object[] { value }); --------------------编程问答-------------------- 代码看上去没问题,完整的代码贴出来吧。 --------------------编程问答-------------------- --------------------编程问答--------------------
+1 --------------------编程问答-------------------- 代码没问题,应该是你将AddMessageToListbox作为线程的执行方法了,导致UI线程卡死没有反应,看不出来Item增加的效果。
private void button1_Click(object sender, EventArgs e)
{
ThreadPool.QueueUserWorkItem(Run, null);
}
private void Run(object pnull)
{
int i=0;
while (true)
{
AddMessageToListbox("第" + i++ + "个");
Thread.Sleep(2000);
}
}
delegate void AddMessageToListBoxDelegate(string str);
public void AddMessageToListbox(object str)
{
if (listBox1.InvokeRequired)
{
AddMessageToListBoxDelegate d = AddMessageToListbox;
listBox1.Invoke(d, str);//三个参数为 委托实例 委托的参数
}
else
{
listBox1.Items.Add(str);
listBox1.SelectedItem = listBox1.Items.Count - 1;
listBox1.ClearSelected();
}
}
这段代码测试没有问题
补充:.NET技术 , C#