Net Core教程

C# 跨线程访问控件

本文主要是介绍C# 跨线程访问控件,对大家解决编程问题具有一定的参考价值,需要的程序猿们随着小编来一起学习吧!

跨线程访问控件,主要用到控件的属性判断InvokeRequired是否为true,为true则为其他线程创建。

using System;
using System.Windows.Forms;
using System.Threading;

namespace 跨线程控件访问
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
            StartPosition = FormStartPosition.CenterParent;
        }

        private void button1_Click(object sender, EventArgs e)
        {
            Thread thread1 = new Thread(() => {
                if (lbl1.InvokeRequired) { //判断是否调动Invoke方法, 如果为 true 则是其他方法创建。
                    for (int i = 0; i <= 50; i++) {
                        //Invoke()方法的第一个参数是返回值为void的委托,第二个是给委托对应方法传递的参数
                        lbl1.Invoke(new Action<string>(s => lbl1.Text = i.ToString()), i.ToString());
                        Thread.Sleep(50);
                    }
                }
            });
            thread1.IsBackground = true;
            thread1.Start();
        }

        private void button2_Click(object sender, EventArgs e)
        {
            Thread thread2 = new Thread(() => {
                if (lbl2.InvokeRequired) { //判断是否调动Invoke方法, 如果为 true 则是其他方法创建。
                    for (int i = 0; i <= 50; i++) {
                        //Invoke()方法的第一个参数是返回值为void的委托,第二个是给委托对应方法传递的参数
                        lbl1.Invoke(new Action<string>(s => lbl2.Text = i.ToString()), i.ToString());
                        Thread.Sleep(50);
                    }
                }
            });
            thread2.IsBackground = true;
            thread2.Start();
        }
    }
}

输出:

这篇关于C# 跨线程访问控件的文章就介绍到这儿,希望我们推荐的文章对大家有所帮助,也希望大家多多支持为之网!