温馨提示×

温馨提示×

您好,登录后才能下订单哦!

密码登录×
登录注册×
其他方式登录
点击 登录注册 即表示同意《亿速云用户服务条款》

c#中winform异步不卡界面的实现方法

发布时间:2021-08-25 17:33:23 来源:亿速云 阅读:188 作者:chen 栏目:编程语言

本篇内容主要讲解“c#中winform异步不卡界面的实现方法”,感兴趣的朋友不妨来看看。本文介绍的方法操作简单快捷,实用性强。下面就让小编来带大家学习“c#中winform异步不卡界面的实现方法”吧!

场景

界面上一个按钮加一人richbox , 点击以后获得当前所在年份

代码实现

定义一个委托实现子线程更新主线程

public delegate void UpdateText(string message);public void UpdateTextMehod(string message){ richTextBox1.Text += message+"\r\n"; richTextBox1.ScrollToCaret();}

按钮的点击事件

func委托:表示模拟一个耗时的操作(2s),然后返回一个结果 。

Asynccallback:表示在相应异步操作完成时调用的方法。在这个方法中,获取异步执行的结果。

要获取异步执行的结果,要调用func.EncInvoke(IAsyncResult)

实例化更新主线程 的委托UpdateText,然后异步调用,在func委托的计算结果 赋值给界面

func异步调用 ,把该异步的的回调方法当做参数传入。

Func<int> func = new Func<int>(() =>      {        Thread.Sleep(2000);        return DateTime.Now.Year;      });      AsyncCallback callback=new AsyncCallback((x) =>      {        var result=func.EndInvoke(x);        UpdateText ut = new UpdateText(UpdateTextMehod);        this.BeginInvoke(ut, result.ToString());      });      func.BeginInvoke(callback, "object vlaue");

注意

最后一句代码,可以写成这样。

var res =func.BeginInvoke(null,null);var result1 = func.EndInvoke(res).ToString();richTextBox1.Text += result1.ToString();
所以异步方法的执行结果要放在回调函数中,这样就不会卡死主界面。

到此,相信大家对“c#中winform异步不卡界面的实现方法”有了更深的了解,不妨来实际操作一番吧!这里是亿速云网站,更多相关内容可以进入相关频道进行查询,关注我们,继续学习!

向AI问一下细节

免责声明:本站发布的内容(图片、视频和文字)以原创、转载和分享为主,文章观点不代表本网站立场,如果涉及侵权请联系站长邮箱:is@yisu.com进行举报,并提供相关证据,一经查实,将立刻删除涉嫌侵权内容。

AI