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

转载 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;

 

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

如何在子线程中通过安全调用方法操作窗体控件

 在查询海量数据时,由于查询需要时间,因此要在查询的同时显示状态信息以通知用户当前正在进行的操作,通常采用多线程进行处理,但是初学者常常使用如下类似的代码:        //button按钮的cli...
  • cattiger75
  • cattiger75
  • 2007年11月21日 01:54
  • 3310

Android中进程与线程及如何在子线程中操作UI线程

程序员的店:http://mickeyhouse999.taobao.com/index.htm?spm=2013.1.w5002-3513783747.2.w5Yghm 插个广告,小店刚开张,欢迎各...
  • bx276626237
  • bx276626237
  • 2013年09月06日 13:11
  • 3145

如何在子线程中操作窗体上的控件

一般来说,直接在子线程中对窗体上的控件操作是会出现异常,这是由于子线程和运行窗体的线程是不同的空间,因此想要在子线程来操作窗体上的控件,是不可能简单的通过控件对象名来操作,但不是说不能进行操作,微软提...
  • oket007
  • oket007
  • 2013年10月06日 07:41
  • 491

往如何在子线程中操作窗体上的控件

****************************************************************************************子线程中操作窗体上的控件...
  • bmoon
  • bmoon
  • 2008年09月11日 09:28
  • 801

如何在子线程中操作窗体上的控件

一般来说,直接在子线程中对窗体上的控件操作是会出现异常,这是由于子线程和运行窗体的线程是不同的空间,因此想要在子线程来操作窗体上的控件,是不可能简单的通过控件对象名来操作,但不是说不能进行操作,微软提...
  • confei
  • confei
  • 2007年10月30日 16:51
  • 300

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

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

愚翁专栏学习

http://blog.csdn.net/knight94/ 
  • zym12021
  • zym12021
  • 2008年01月25日 10:38
  • 232

C#如何控制另一个窗体上的控件的属性

C# 如何从一个窗口的控件控制另一个窗体上的控件的属性牛人总是在的1楼回答,楼主是不是有没有看懂。将窗体对象作为一个参数传给另外一个窗体的构造方法尽量减少数据库的操作,数据库操作完毕后要断开连接,写个...
  • hb0523
  • hb0523
  • 2010年12月12日 22:42
  • 2085

MFC子线程访问主线程对话框程序的控件对象

最近在使用 VC 开发软件时需要用到多线程同步来解决开发过程中遇到的问题。本来以为只要象控制台程序一样,在主线程创建子线程,并设置好相应的对象事件就能解决问题,但是等到真正做起来,才在实践中发现原来事...
  • xbmoxia
  • xbmoxia
  • 2013年11月27日 14:17
  • 4690

如何在一个窗体中调用另一个窗体的控件或方法

要把Form1中的控间改成public属性 具体实现过程请参看一下代码(在form2的textbox1中输入然后在form1中的label1中显示textbox中的内容 //form1代码...
  • shouhouxiaomuwu
  • shouhouxiaomuwu
  • 2013年10月23日 19:38
  • 783
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:如何在子线程中操作窗体上的控件 (来自 愚翁专栏)
举报原因:
原因补充:

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