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;

  • 相关阅读:
    使用数据库时注意单引号、双引号和反引号的区别
    Mysql中的事件
    C#使用WindowsMediaPlayer实现视频播放
    Chart控件,鼠标选择区域,可以局部放大缩小
    C#自定义控件在添加引用后不显示在工具箱的解决方法(转)
    C# 中的#if、#elif、#else、#endif等条件编译符号
    若有派生类,则基类中的析构函数要用虚函数
    迭代器失效
    this指针
    VS调试快捷键
  • 原文地址:https://www.cnblogs.com/zhangchenliang/p/2373284.html
Copyright © 2011-2022 走看看