如何在子线程中操作窗体上的控件 (来自 愚翁专栏)

转载 2006年05月23日 10:04:00

dXC

一般来说,直接在子线程中对窗体上的控件操作是会出现异常,这是由于子线程和运行窗体的线程是不同的空间,因此想要在子线程来操作窗体上的控件,是不可能简单的通过控件对象名来操作,但不是说不能进行操作,微软提供了Invoke的方法,其作用就是让子线程告诉窗体线程来完成相应的控件操作。

 

现在用一个用线程控制的进程条来说明,大致的步骤如下:

1.  创建Invoke函数,大致如下:

        /// <summary>

        /// Delegate function to be invoked by main thread

        /// </summary>

        private void InvokeFun()

        {

            if( prgBar.Value < 100 )

                prgBar.Value = prgBar.Value + 1;

        }

 

2.  子线程入口函数:

        /// <summary>

        /// Thread function interface

        /// </summary>

        private void ThreadFun()

        {

            //Create invoke method by specific function

            MethodInvoker mi = new MethodInvoker( this.InvokeFun );

 

            for( int i = 0; i < 100; i++ )

            {

                this.BeginInvoke( mi );

                Thread.Sleep( 100 );

            }

        }

 

3.  创建子线程:

            Thread thdProcess = new Thread( new ThreadStart( ThreadFun ) );

            thdProcess.Start();

 

       备注:

              using System.Threading;

              private System.Windows.Forms.ProgressBar prgBar;

 

    运行后的效果如下图所示:

实现子线程上操作窗体控件

方法一:MethodInvoker  (不接受参数) MSDN定义:表示一个委托,该委托可执行托管代码中声明为 void 且不接受任何参数的任何方法。 MSDN备注:MethodI...

从线程操作主窗体控件

  • 2010年02月07日 09:59
  • 29KB
  • 下载

在C#中子线程如何操作主线程中窗体上控件

在C#中,直接在子线程中对窗体上的控件操作是会出现异常,这是由于子线程和运行窗体的线程是不同的空间,因此想要在子线程来操作窗体上的控件,是不可能简单的通过控件对象名来操作,但不是说不能进行操作,微软提...
  • shuaihj
  • shuaihj
  • 2014年11月20日 17:57
  • 25162

C#中子线程操作主线程中窗体上控件的方法

在C#中,直接在子线程中对窗体上的控件操作是会出现异常,这是由于子线程和运行窗体的线程是不同的空间,因此想要在子线程来操作窗体上的控件,是不可能简单的通过控件对象名来操作,但不是说不能进行操作,微软提...

C#中子线程操作主线程中窗体上控件的方法

注:本文转载自C#中子线程操作主线程中窗体上控件的方法 在C#中,直接在子线程中对窗体上的控件操作是会出现异常,这是由于子线程和运行窗体的线程是不同的空间,因此想要在子线程来操作窗体上的控件...

C# 子线程调用主线程窗体的解决方法

由于Windows窗体控件本质上不是线程安全的。因此如果有两个或多个线程适度操作某一控件的状态(set value),则可能会迫使该控件进入一种不一致的状态。还可能出现其他与线程相关的bug,包括...
  • woolnil
  • woolnil
  • 2014年01月02日 13:33
  • 1050

C# 子线程调用其它窗体

C# 子线程调用其它窗体   有很多朋友不知道怎么在thread中打开一个窗体,总是说没有反应,下面我就说说这方面自己的经验。代码如下:   private void ThreadFunc()...
  • stardtx
  • stardtx
  • 2012年04月10日 09:06
  • 700

C# 子线程调用主线程窗体的解决方法

C# 子线程调用主线程窗体的解决方法 摘自其他人博客,自己试过确实解决问题。(如在自己定义的线程里面给textbox赋值...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:如何在子线程中操作窗体上的控件 (来自 愚翁专栏)
举报原因:
原因补充:

(最多只允许输入30个字)