使用TaskScheduler 调度器 实现跨线程的控件访问

Posted Young_汨

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了使用TaskScheduler 调度器 实现跨线程的控件访问相关的知识,希望对你有一定的参考价值。

 1         //任务调度器
 2         TaskScheduler UIscheduler = null;
 3         public Form1()
 4         {
 5             //获取任务调度器
 6             UIscheduler = TaskScheduler.FromCurrentSynchronizationContext();
 7             InitializeComponent();
 8         }
 9 
10         private void btnTaskScheduler_Click(object sender, EventArgs e)
11         {
12             System.Threading.CancellationTokenSource cts = new System.Threading.CancellationTokenSource();
13             //启动一个任务线程
14             Task<int> t = Task.Run(() =>Sum(100));
15             //使用UIscheduler 调度器 实现跨线程的控件访问
16             t.ContinueWith(task => txtRes.Text = t.Result.ToString(), cts.Token,TaskContinuationOptions.OnlyOnRanToCompletion,UIscheduler);
17             t.ContinueWith(task => txtRes.Text = "Error",System.Threading.CancellationToken.None, TaskContinuationOptions.OnlyOnFaulted,UIscheduler);
18         }
19         private int Sum(int num)
20         {
21             int res = 0;
22             for (int i = 0; i <= num; i++)
23             {
24                 checked { res += i; }
25                 //res += i;
26             }
27             return res;
28         }

 

以上是关于使用TaskScheduler 调度器 实现跨线程的控件访问的主要内容,如果未能解决你的问题,请参考以下文章

自定义一个简单的Task调度器任务循环调度器TaskScheduler

Spark源码剖析——SparkContext的初始化_创建任务调度器TaskScheduler

Spark 源码解读SparkContext的初始化之创建任务调度器TaskScheduler

[Spring笔记]支持注解的Spring调度器

Spark TaskScheduler 概述

转发:用惯了Task,你应该也需要了解它的内部调度机制TaskScheduler