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

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

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

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

C# 子线程调用其它窗体

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

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

C# 子线程调用主线程窗体的解决方法 摘自其他人博客,自己试过确实解决问题。(如在自己定义的线程里面给textbox赋值...

WinForm中新开一个线程操作窗体上的控件(跨线程操作控件)GOOD

最近在做一个winform的小软件(抢票的...)。登录窗体要从远程web页面获取一些数据,为了不阻塞登录窗体的显示,开了一个线程去加载数据远程的数据,会报一个错误"线程间操作无效: 从不是创建控件“...
  • Baple
  • Baple
  • 2014-05-08 23:11
  • 1952

c#中如何跨线程调用windows窗体控件?

我们在做winform应用的时候,大部分情况下都会碰到使用多线程控制界面上控件信息的问题。然而我们并不能用传统方法来做这个问题,下面我将详细的介绍。首先来看传统方法: public partial c...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

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