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

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了如何跨线程调用Windows窗体控件相关的知识,希望对你有一定的参考价值。

通过一个子线程来操作主线程中的控件,但是,这样作会出现一个问题(如图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窗体控件的主要内容,如果未能解决你的问题,请参考以下文章

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

winform的窗体控件可以用线程直接调用吗

跨线程Winforms控件编辑[重复]

VB跨线程调用WPF控件

跨线程操作Treeview

wpf中 我新开一个线程添加控件到主窗体