很多时候,我们要实现Winform异步操作,你可以用传统的方法,但个人感觉代码不好理解,而且使用真有点不舒服。也可以用Task来实现,Task(.net4.0新添加的对象)其实就是对线程池线程的一个封装,里面功能比较多,也比较好操作,其他的不多讲,今天只讲异步操作,举个简单的例子吧:

  先上个图:单击Go按钮,数字自动增加,比较简单。

        

直接上代码:

  public partial class Form1 : Form
{
private CancellationTokenSource cts = null;//主要用于中断线程
private TaskScheduler taskScheduler; public Form1()
{
InitializeComponent(); //获取当前线程上下文
taskScheduler = TaskScheduler.FromCurrentSynchronizationContext();
} /*传统方法*/
private void UpdateText(string text)
{
if (this.InvokeRequired)
btnTask.Invoke(new Action<string>(UpdateText), text);
else
btnTask.Text = text;
} private void GoByThread()
{
Thread thread = new Thread(() =>
{
for (int i = ; ; i++)
{
Thread.Sleep();
UpdateText(i.ToString());
}
});    thread.IsBackground=true;
34 thread.Start();
} /*Task*/
private void GoByTask()
{
if (cts == null)
{
cts = new CancellationTokenSource(); Task.Factory.StartNew(() =>
{
for (int i = ; ; i++)
{
Thread.Sleep(); //下面是关键代码,内嵌一个Task
Task.Factory.StartNew(() =>
{
btnTask.Text = i.ToString();
}, cts.Token, TaskCreationOptions.AttachedToParent, taskScheduler);
}
}, cts.Token);
}
} //按钮单击事件
private void btnTask_Click(object sender, EventArgs e)
{
//GoByThread();
GoByTask();
}
}

如果是在WPF当中,传统的方法还得改点代码,而用Task不需要修改代码,TaskScheduler.FromCurrentSynchronizationContext()能够获取当前是Winform线程还是WPF线程,而且传统方法中UpdatText方法老觉得看着有点别扭,用Task只需在Task中再开启一个Task即可。

Task(TPL)简单的实现Winform(WPF)异步的更多相关文章

  1. C# Wpf异步修改UI,多线程修改UI(二)

    1.使用定时器异步修改 这是相对比较简单的方法 在Wpf中定时器使用DiapatcherTimer,不使用Timer原因: 在一个应用程序中,Timer会重复生成time事件,而DispatcherT ...

  2. 【转】WPF 异步执行方法后对 UI 进行更新的几种方法

    使用 async/await 的情况: private async void Button_Click(object sender, RoutedEventArgs e) { (sender as B ...

  3. WPF异步载入图片,附带载入中动画

    原文:WPF异步载入图片,附带载入中动画 WPF异步载入图片,附带载入中动画 最近,在做一个WPF项目.项目中有一个需求,就是以列表的方式显示出项目图片.这些图片有的存在于互联网上,有的存在于本地磁盘 ...

  4. Winform/WPF中内嵌BeetleX的HTTP服务

    在新版本的BeetleX.FastHttpApi加入了对netstandard2.0支持,如果程序基于.NetFramework4.6.1来构建WinForm或WPF桌面程序的情况下可以直接把Beet ...

  5. Rx与Async Task的简单对比

    有关Reactive Extensions的介绍可见https://rx.codeplex.com/,总的来说,你可以当它是又一个异步编程的框架,它以观察者模式实现了对数据流的的“订阅”.一个列表,一 ...

  6. MFC,QT与WinForm,WPF简介

    编程语言的组成编程语言做为一种语言自然和英语这些自然语言有类似的地方.学英语时我们知道要先记26个字母,然后单词及其发音,接下来就是词组,句子.反正简单的说就是记单词,熟悉词法,句法.接下来就是应用了 ...

  7. 简单说下 Winform 的分页快速开发框架必须要实现的几个功能之一

    简单说下 Winform 的分页快速开发框架必须要实现的几个功能之一 分页非为前端分页  和 后端分页,前端分页只有适用于B/S,B/S的呈现速度远远不如C/S,而C/S则没有这个问题,所以分页必然是 ...

  8. 提供PPT嵌入Winform/WPF解决方案,Winform/WPF 中嵌入 office ppt 解决方案

    Winform/WPF 中嵌入 office ppt(powerpoint)解决方案示: 1. 在winform中操作ppt,翻页.播放.退出:显示 总页数.当前播放页数 2. 启动播放ppt时录制视 ...

  9. 优雅的在WinForm/WPF/控制台 中使用特性封装WebApi

    优雅的在WinForm/WPF/控制台 中使用特性封装WebApi 说明 在C/S端作为Server,建立HTTP请求,方便快捷. 1.使用到的类库 Newtonsoft.dll 2.封装 HttpL ...

随机推荐

  1. android draw9patch工具使用

    1.作用 将图片制作android .9图片xxx.9.png  xxx.9.jpg xxx.9.gif  这些图片在android上拉伸时,边角不变形,不影响效果. 2.工具位置 Android的S ...

  2. 关于web中的路径

    做了许多Demo发现,浏览器解析的路径和服务器解析的路径是不同的.我们知道,路径加上/的时候,表示的是绝对路径的意思,而如果是服务器解析的话,这个/相对的是我们的web应用,即相对于http://19 ...

  3. solr 统计中stats的一般用法

    //统计数据 根据查询条件 public String getStats(String ipName) { JSONObject obj; JSONArray pageArray = new JSON ...

  4. Win7下单机版的伪分布式solrCloud环境搭建Tomcat+solr+zookeeper【转】

    Win7下单机版的伪分布式solrCloud环境搭建Tomcat+solr+zookeeper 1.软件工具箱 在本文的实践中,需要用到以下的软件: Tomcat-7.0.62+solr-5.0.0+ ...

  5. CentOS Linux下MySQL 5.1.x的安装、优化和安全配置

    下载页面:http://dev.mysql.com/downloads/mysql/5.1.html#downloads 到页面底部,找到Source downloads,这个是源码版本,下载第1个T ...

  6. HashMap的简单实现

    基本概念 Map 别名映射表,也叫关联数组,基本思想是它维护的键-值(对)关联,因此可以用键查找值,也有放入键值的操作,下面根据定义自己来实现一个Map,首先应该想到的是数组,因为大多数Java集合类 ...

  7. C#基础学习4

    流程控制!

  8. 配置组件的 props

    组件是相互独立.可复用的单元,一个组件可能在不同地方被用到.但是在不同的场景下对这个组件的需求可能会根据情况有所不同,例如一个点赞按钮组件,在我这里需要它显示的文本是“点赞”和“取消”,当别的同事拿过 ...

  9. 序列化shelve模块

    1.shelve对pickle进行封装,所以shelve也只能在python里使用. shelve可以进行多次dump而且顺序不会乱. import shelve f = shelve.open('s ...

  10. 洛谷 P2912 [USACO08OCT]牧场散步Pasture Walking

    题目描述 The N cows (2 <= N <= 1,000) conveniently numbered 1..N are grazing among the N pastures ...