请熟悉C#线程访问主线程控件的高手指点一下,感谢
namespace Httptest
{
public partial class Form1 : Form
{
Thread mythread;
public delegate void mydel();
public Form1()
{
InitializeComponent();
Mytimer mytimer1=new Mytimer();
mythread=new Thread(new ThreadStart(Myzhumethod));
// mythread.IsBackground = true; //设置后线程会随主线程结束
//如存在宿主进程vshost.exe 菜单栏下的 项目-属性-调试-启用调试器,把启用Visual Studio宿主进程这一项取消掉就OK了
//原因:因为窗口运行的时候创建了前台线程,而前台线程会阻止进程终止,所以即使当窗口关闭但是进程一直无法结束。
mythread.Start();
mythread.Suspend();
}
。。。。。。。。。。。。。。。
public void Myzhumethod()
{
Mytimer mytimer1=new Mytimer();
mydel mydel1 = new mydel(mytimer1.timecounter);
this.Invoke(mydel1);
}
}
public class Mytimer
{
public void timecounter()
{
int counter = 300;
int i = 0;
while (true)
{
Thread.Sleep(1000);
counter--;
Label3.TextBox = counter.ToString();
if (counter == 0)
{
counter = 300;
}
}
}
}
经高人指点,想把类Mytimer里的 timecounter函数在运行过程中实时将counter值显示在主线程控件Label3中,我用了委托和Invoke,但运行时还报错说 上下文找不到Label3
请问我如何修改才能正常使用。
------解决方案--------------------
Label3在哪里定义?
一般Invoke的方法是Form的方法,你是new一个对象来invoke,很奇怪,这样应该没用,
timecounter应该作用Form的方法,不过看起来很奇怪,我想,你应该把Label3.TextBox = counter.ToString();
这句提出来作为Form的一个方法,然后在timecounter中用invoke调用它,