关于线程调用窗体控件的一个疑问
起因:
在做程序的时候用到了进度条,原来就听说这个需要使用线程,但是我在写代码的时候发现做一个循环给进度条空间反复赋值进度条也是可以动的,但是如果鼠标点击了其他地方或者拖动窗体进度条就不能动了,于是决定改用线程,看了很多使用线程控制进度条的帖子,里面很多都提到了必须使用一个BeginInvoke的方法,其中看到最多的就是 Knight94(愚翁)的http://blog.csdn.net/knight94/archive/2006/03/16/626584.aspx
其中就讲到如何使用,例如:
MethodInvoker mi = new MethodInvoker( this.InvokeFun );
但是我根据提供的代码写了个简单的例程想看看在线程中调用控件究竟是如何出错的,代码如下:
private void button1_Click(object sender, System.EventArgs e)
{
Thread thdProcess = new Thread( new ThreadStart( ThreadFun ) );
thdProcess.Start();
}
private void ThreadFun()
{
for( int i = 0; i < 100; i++ )
{
if( this.prgBar.Value < 100 )
{
this.prgBar.Value = prgBar.Value + 1;
this.button1.Text = prgBar.Value.ToString();
}
Thread.Sleep( 100 );
}
}
程序并没有用到委托和MethodInvoker 等,结果程序跑通了,并且并不妨碍用鼠标对窗体的拖动
问题:
为什么这里的线程可以控制到窗体的空件呢?是因为线程函数和窗体的控件事件在同一个类下么?