zoukankan      html  css  js  c++  java
  • 如何在子线程中操作窗体上的控件

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

  • 相关阅读:
    Docker & ASP.NET Core (3):发布镜像
    Docker & ASP.NET Core (2):定制Docker镜像
    Docker & ASP.NET Core (1):把代码连接到容器
    Redis五大数据类型的常用操作
    centos安装Redis
    SpringBoot进阶教程(五十一)Linux部署Quartz
    mybatis在xml文件中处理转义字符
    org.apache.ibatis.builder.IncompleteElementException: Could not find result map java.lang.Integer
    SpringBoot进阶教程(五十)集成RabbitMQ---MQ实战演练
    浅谈RabbitMQ Management
  • 原文地址:https://www.cnblogs.com/zhangchenliang/p/2373284.html
Copyright © 2011-2022 走看看