Winform异步操作防止UI界面“假死”

创建winform项目,使用以下方式,可以实现异步执行耗时操作,防止主线程阻塞,导致界面“假死”

using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Data;
using System.Drawing;
using System.Linq;
using System.Text;
using System.Threading.Tasks;
using System.Windows.Forms;

using System.Threading;

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

        private void Form1_Load(object sender, EventArgs e)
        {
            RunAsync(() =>
            {
                for (var i = 0; i < 100000; i++)
                {
                    Thread.Sleep(1000);
                    RunInMainthread(() =>
                        {
                            label1.Text = i.ToString();
                        });
                }
            });
        }

        // 异步线程
        public static void RunAsync(Action action)
        {
            ((Action)(delegate()
            {
                action.Invoke();
            })).BeginInvoke(null, null);
        }

        public void RunInMainthread(Action action)
        {
            this.BeginInvoke((Action)(delegate()
            {
                action.Invoke();
            }));
        }

    }
}
最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
【社区内容提示】社区部分内容疑似由AI辅助生成,浏览时请结合常识与多方信息审慎甄别。
平台声明:文章内容(如有图片或视频亦包括在内)由作者上传并发布,文章内容仅代表作者本人观点,简书系信息发布平台,仅提供信息存储服务。

相关阅读更多精彩内容

  • Android 自定义View的各种姿势1 Activity的显示之ViewRootImpl详解 Activity...
    passiontim阅读 176,050评论 25 709
  • Object C中创建线程的方法是什么?如果在主线程中执行代码,方法是什么?如果想延时执行代码、方法又是什么? 1...
    AlanGe阅读 5,813评论 0 17
  • 从哪说起呢? 单纯讲多线程编程真的不知道从哪下嘴。。 不如我直接引用一个最简单的问题,以这个作为切入点好了 在ma...
    Mr_Baymax阅读 7,809评论 1 17
  • 老子曾曰:知人者智,自知者明。 对于自己的认知我一向不予重视,只知道别人眼中的我是固执,是随性,亦或是对人冷淡。这...
    亲爱的毛毛同学阅读 3,780评论 1 1
  • 某日本网站上列出中国人和日本人在和熟人见面后打招呼的不同,这样写道:“日本人无论何时,见面打招呼都是你好,...
    浑水摸鱼儿阅读 2,425评论 0 1

友情链接更多精彩内容