vs 2005 启用线程,因为要对窗体进行交互,所以用了委托,不用的话会报错说控件不是由主线程初始化的等等。。
private void button1_Click(object sender, EventArgs e)
{
Thread cha = new Thread(new ThreadStart(threadchange));
cha.Start();
}private void threadchange()
{
MethodInvoker In = new MethodInvoker(change);
this.BeginInvoke(In);
}private void change()
{
this.label1.Text = "已发生变化";
}-----------------------------------------------------------以上方法可以正常通过, 但是如果使用下面这个带参数调用的话就不行了private void change(string str)
{
this.label1.Text = str;
}因为MethodInvoker In = new MethodInvoker(change);这个委托change不能带参数,我是初学者,请教怎么才可以调用带参数的???
解决方案 »
- 网站统计
- Winform用Progress.Start打开文件夹窗口出错
- MouseHove事件在控件内部不能触发
- 如何图片轮换实现(加贴)
- 求助:怎么得到Datagridview中已删除行的数据(刚注册的号,没分,寻好人,高人)
- 帮个忙,从datagrid中查找与设置条件相符的行使之加亮显示,还有就是筛选出与条件相符的一些行?
- 在服务器端怎么用for循环加入多个imagebutton控件并加上相应的onclick处理函数
- 一个真正需要有经验才能解决的问题。
- 文本文件导入问题
- 我怎样判断系统字体?
- **** vs2005:winform中的MenuStrip控件是否可以动态加载菜单项??***
- 有关于socket,大家帮帮忙啊
class TT
{
public string pMsg;
public void Msg(string msg)
{
MessageBox.Show(msg);
}
public void Msg()
{
MessageBox.Show(pMsg);
}
}private void button1_Click(object sender, System.EventArgs e)
{
TT sT=new TT();
sT.pMsg = "AA";
System.Threading.Thread thd=new System.Threading.Thread(new System.Threading.ThreadStart(sT.Msg));
thd.Start();
}
{
MethodInvoker In = new MethodInvoker(change);
this.BeginInvoke(In,new object[] {"已发生变化"}););
}private void change(string str)
{
this.label1.Text = str;
}
{
MethodInvoker In = new MethodInvoker(change);
this.BeginInvoke(In,new object[] {"已发生变化"});
}private void change(string str)
{
this.label1.Text = str;
}
然后就可以用form1的方法了。
可能会用到 form1.textbox.text
======================
你的form1的textbox如果是動態設定的text最好不要用這種方法﹐先在程序中想辦法取出text,然后再傳值。當然你也可以直接傳一個form,例﹕
class TT
{
public 你的程序名.form1 pfrm;
public TT(Form frm)
{
pfrm=(你的程序名.form1)frm;
}
public void Msg()
{
MessageBox.Show(pfrm.TextBox1.text);
}}
private void button1_Click(object sender, EventArgs e)
{
Thread cha = new Thread(new ThreadStart(threadchange));
cha.Start();
}private void threadchange()
{
MethodInvoker In = new MethodInvoker(change);
this.BeginInvoke(In);
}private void change()
{
this.label1.Text = "已发生变化";
}
-------------------------------------- 可是这个调用的方法都是 不带参数的,带了参数就不行了,我还没搞定winer2006(我心飞扬) 改写的方法this.BeginInvoke(In,new object[] {"已发生变化"}); 也不行,运行不了, 说什么重载与委托冲突还是什么的。
private void threadchange()
{
myEventHandle In = new myEventHandle(change);
this.BeginInvoke(In);
}private void change(string sTmp)
{
this.label1.Text = sTmp;
}
myEventHandle In = new myEventHandle(change,new object[] {"已发生变化"});
myEventHandle In = new myEventHandle(new myEventHandle(change),new object[] {"已发生变化"});
Invoke(new myEventHandle(change),new string[]{"狂暈﹐又錯了"});
public delegate void myEventHandle(string str);
private void threadchange()
{
Invoke(new myEventHandle(change),new string[]{"555﹐111"});
} private void change(string sTmp)
{
this.label1.Text = sTmp;
}