Winform 线程 委托 更新 WinForm界面

原创 2017年09月11日 14:52:48


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

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

        private bool refresh = true;
        private void button1_Click(object sender, EventArgs e)
        {
            int num = 0;
            
            //new Thread(delegate() //开线程刷新 .net 2.0写法
            new Thread( ()=> //开线程刷新 .net 3.5以上写法
            {
                if (refresh)
                {
                    refresh = !refresh;
                    UpdateButton(button1, "关闭刷新");
                }
                else
                {
                    refresh = !refresh;
                    UpdateButton(button1, "开始刷新");
                }
                
                while (!refresh) //用死循环刷新
                {
                    UpdateTextBox(textBox1, "刷新次数:" + num++);
                }
            }) {IsBackground = true}.Start();
        }


        delegate void RefreshDel();
        private void UpdateTextBox(TextBox sender, string content)
        {
            //new RefreshDel(delegate() //.net 2.0写法
            //{
                this.Invoke(new RefreshDel(delegate()
                {
                    sender.AppendText(content + Environment.NewLine); //TextBox的Text赋值
                }));
            //}).Invoke();
        }

        private void UpdateButton(Button sender, string content)
        {
            //new Action( ()=> //.net 3.5以上写法
            //{
                this.Invoke(new Action( ()=>
                {
                    sender.Text = content; //button的Text赋值
                }));
            //}).Invoke();
        }
    }
}


版权声明:本文为博主原创文章,未经博主允许不得转载。

相关文章推荐

C# winform 防止界面卡住 线程 委托

1. 新建WindowsApplication,拖textBox、button、richTextBox控件。 2.代码如下: using System; using System.Col...

Winform 使用委托线程修改控件属性.显示时间示例

class GClock:Form { #region 跨线程更新UI控件 private delegate void UpdataTextDelegate(L...

委托+线程 winform下超简单实时进度条控件的实现

由于一直以来都是在做ASP.NET 对于多线程这一块涉猎不深 觉得趁着入职之前好好练习一下多线程编程 多线程最简单直观的例子估计就是进度条了 同时由于还涉及到UI线程 更加可以了解一下winform编...

Winform跨线程打印日志到TextBox(使用委托跨线程访问控件)

class Test { public delegate void ThreadStartDelegate(System.Windows.Forms.RichTextBox r...

C# Winform 跨线程更新UI控件常用方法总结(转)

出处:http://www.tuicool.com/articles/FNzURb 概述 C#Winform编程中,跨线程直接更新UI控件的做法是不正确的,会时常出现“线程间操作无效: 从不是创建...

C# Winform 跨线程更新UI控件常用方法汇总

 C#Winform编程中,跨线程直接更新UI控件的做法是不正确的,会时常出现“线程间操作无效: 从不是创建控件的线程访问它”的异常。处理跨线程更新Winform UI控件常用的方法有4种: ...

C# Winform 跨线程更新UI控件常用方法总结

C# Winform 跨线程更新UI控件常用方法总结(转) 出处:http://www.tuicool.com/articles/FNzURb 概述 C#Winform编程中,跨线程直接更新...
内容举报
返回顶部
收藏助手
不良信息举报
您举报文章:深度学习:神经网络中的前向传播和反向传播算法推导
举报原因:
原因补充:

(最多只允许输入30个字)