码迷,mamicode.com
首页 > 编程语言 > 详细

如何跨线程调用Windows窗体控件

时间:2017-08-24 00:07:11      阅读:194      评论:0      收藏:0      [点我收藏+]

标签:private   send   win   .text   gen   oid   set   model   pre   

通过一个子线程来操作主线程中的控件,但是,这样作会出现一个问题(如图1所示),就是TextBox控件是在主线程中创建的,在子线程中并没有对其进行创建,也就是从不是创建控件的线程访问它。那么,如何解决跨线程调用Windows窗体控件呢?可以用线程委托实现跨线程调用Windows窗体控件。下面将上一个例子进行一下改动。代码如下:

using System;

using System.Collections.Generic;

using System.ComponentModel;

using System.Data;

using System.Drawing;

using System.Linq;

using System.Text;

using System.Windows.Forms;

 

using System.Threading;//添加线程的命名空间

 

namespace ppp

{

    public partial class Form1 : Form

    {

        public Form1()

        {

            InitializeComponent();

        }

 

        Thread t; //定义线程变量

 

        private void button1_Click(object sender, EventArgs e)

        {

            t = new Thread(new ThreadStart(Threadp)); //实例化线程

            t.Start();//启动线程

        }

 

        private delegate void setText();//定义一个线程委托

自定义方法Threadp,主要用于线程的调用。代码如下:

        public void Threadp()

        {

            setText d = new setText(Threading); //实例化一个委托

            this.Invoke(d); //在拥用此控件的基础窗体句柄的线程上执行指定的委托

        }

自定义方法Threading,主要作于委托的调用。代码如下:

        public void Threading()

        {

            textBox1.Text = "实现在子线程中操作主线程中的控件";

            t.Abort();//关闭线程

        }

    }

}

 

如何跨线程调用Windows窗体控件

标签:private   send   win   .text   gen   oid   set   model   pre   

原文地址:http://www.cnblogs.com/test404/p/7420601.html

(0)
(0)
   
举报
评论 一句话评论(0
登录后才能评论!
© 2014 mamicode.com 版权所有  联系我们:gaon5@hotmail.com
迷上了代码!