C# Winform:
一个form上有button1和button2,
button的click事件是:MessageBox.Show("Hello");
button2的click事件里开启一个线程:
{
Thread myThread=new Thread(new ThreadStart(Run));
myThread.Start();
}在private void Run()里面要求实现:
将button1上文字的字体变为Red,并且执行一次button1的click事件
本人对委托机制不是很了解,而线程中要修改非此线程中的控件到了VS05后都需要用委托来实现了,
所以本人求一段简单的代码,1是了解下然后在线程中修改主线程控件的属性以及操作主线程中控件的事件
望给予相关示例代码,如上要求,谢谢!
一个form上有button1和button2,
button的click事件是:MessageBox.Show("Hello");
button2的click事件里开启一个线程:
{
Thread myThread=new Thread(new ThreadStart(Run));
myThread.Start();
}在private void Run()里面要求实现:
将button1上文字的字体变为Red,并且执行一次button1的click事件
本人对委托机制不是很了解,而线程中要修改非此线程中的控件到了VS05后都需要用委托来实现了,
所以本人求一段简单的代码,1是了解下然后在线程中修改主线程控件的属性以及操作主线程中控件的事件
望给予相关示例代码,如上要求,谢谢!
解决方案 »
- C# SerialPort.DataReceived 是不是在后台线程里运行
- C#线程问题 在线等。。。。。
- 请教一小段VB.NET代码如何转为C#的
- 使用VS2005部署带有数据库的Web站点,按人家的步骤作了,结果总是已成功与数据库建立连接,但在登录过程发生错误(Provider:共享内存提供程序,error:0-管道的另一端上无任何进程)
- VS2003快捷键提问
- 懂PHP和C语言,现在想学习下C#或者JAVA,请教下c#的学习问题!
- 怎么在vc#.net中使用*.lib文件
- 怎么使gridview中读取的数据垂直居中
- 如何throw错误并回收资源?
- .net FrameWork 用c#开发出来的,C#反过来用.net FrameWork,这是怎么回事?
- 函数异步回调,帮忙看下
- 如何判断一个窗体是否被打开?
//委托的定义
private delegate void DelButtonClick();//这是你自己的私有方法
private void buttonClick()
{
if(InvokeRequired)
{
DelButtonClick dbc = new dbc(buttonClick); //异步的委托
this.Invoke(dbc);
return; //这里一定要返回
}
MessageBox.Show("test");
}
//Button1的事件调用
private void button1_Click(object Sender,EventArg e)
{
buttonClick();
}//Button2的线程调用
private void Run()
{
buttonClick(); //都是直接调用
}
首先定义一个委托 然后实例化这个委托 并给这个委托的实例一个调用的方法 然后用响应的Invoke(委托实例,参数)实现代理
这是我现在的理解
那请问这里的Invoke(委托实例,参数)的参数应该怎么设置的?
比如就拿我上面的例子 要求将button1.ForeColor设置成Red
这里的参数该然后设置及运用的呢?
//带参数的委托定义,为了更通用化,我给带两个参数的例子。带1个或更多参数与此相同。
private delegate void DelButtonClick(Color f,Color b);//这是你自己的私有方法
private void buttonClick(Color f,Color b);
{
if(InvokeRequired)
{
DelButtonClick dbc = new dbc(buttonClick); //异步的委托
this.Invoke(dbc,f,b); //参数加在后面。如果只有一个参数,你就用this.Invoke(dbc,f);这种形式的。
return; //这里一定要返回
}
button1.ForeColor = f;
button1.BackColor = b;
}
//Button1的事件调用
private void button1_Click(object Sender,EventArg e)
{
buttonClick(Color.Black,Color,Green);
}//Button2的线程调用
private void Run()
{
buttonClick(Color.Green,Color.Black); //都是直接调用
}
好像应该改为 DelButtonClick dbc = new DelButtonClick (buttonClick); //异步的委托