你已经跨线程调用控件了,当然无作用也不报错。在Form1中调用当然可以,但在Form2中(另一线程)调用就无效。
delegate ListViewItemClearDelegate();
ListViewItemClearDelegate _dListViewItemClear;
public void Form1_Load()
{
_dListViewItemClear=new ListViewItemClearDelegate(ListViewItemClear);
}
NetPlay()
{
MessageBox.Show("哈哈");//正常显示
ListViewItemClear();
}
public void ListViewItemClear()
{
if(listView1.InvokeRequired)
{
listView1.Invoke(_dListViewItemClea);
}
else
{
listView1.Items.Clear();
}
}
解决思路就这样,代码没有调试过,只是凭印象写的,你试着编译一下。
凡是窗体间的通信都是采用事件(或者委托:一种特殊的事件)的机制来完成的,因为这才是最佳的方案。像你这样直接调用方法即便有时没有出错也是后患无穷的。
这个问题很好解决的。。。在programe.cs文件中Application.Run(from)的时候,把form在programe里面把form设置成为静态的窗体
publi static form1 form=new form1();
Application.Run(form1);
之后再运行from2之后,就可以在form2里面通过调用 programe.form.(方法名)......来调用 from1里面公开的方法
两个窗口间传值用owner,设置一个窗口A是另外一个窗口B的owner,在把窗口B中的数据传到A中就要把窗口A中的空间的Modifiers设置为public,然后在A中定义一个B,就可以让B中的数据传到窗口A中的控件上