如何在多线程中调用winform窗体控件

 我来答
freeeeeewind
推荐于2017-09-28 · TA获得超过1万个赞
知道大有可为答主
回答量:3227
采纳率:94%
帮助的人:1353万
展开全部

(1)窗体及控件

(2)窗体代码Form1.cs

using System;
using System.Collections.Generic;
using System.Windows.Forms;
using System.Threading;

namespace WindowsFormsApplication1
{
    public partial class Form1 : Form
    {
        public Form1()
        {
            InitializeComponent();
        }

        private void button1_Click(object sender, EventArgs e)
        {
            // 启动线程
            Thread t = new Thread(MyThread);
            t.IsBackground = true;
            t.Start();
        }

        void MyThread()
        {
            while (true)
            {
                // 在控件label1上显示日期和时间
                UpdateLabel(DateTime.Now);
                Thread.Sleep(1000);
            }
        }
        // 1. 声明一个委托    
        delegate void UpdateLableDelegate(DateTime dt);
        
        private void UpdateLabel(DateTime dt)
        {
            
            if (label1.InvokeRequired)
            {
                // 跨线程更新label1处理                
                UpdateLableDelegate del = 
                    new UpdateLableDelegate(UpdateLabel);
                label1.Invoke(del, dt);
            }
            else
            {
                // 显示日期和时间
                label1.Text = dt.ToString("yyyy-MM-dd HH:mm:ss");
            }
        }
    }
}

推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式