单线程任务 Task.Factory.StartNew 封装
代码:
- using log4net;
- using SunCreate.CombatPlatform.Security;
- using System;
- using System.Collections.Generic;
- using System.Linq;
- using System.Text;
- using System.Windows.Threading;
- namespace SunCreate.CombatPlatform.Client
- {
- /// <summary>
- /// 线程帮助类(处理单线程任务)
- /// </summary>
- public class ThreadHelper
- {
- private static ILog _log = log4net.LogManager.GetLogger(typeof(ThreadHelper));
- /// <summary>
- /// 执行
- /// 例:ThreadHelper.Run(() => { }, (ex) => { });
- /// </summary>
- /// <param name="doWork">在线程中执行</param>
- /// <param name="errorAction">错误处理</param>
- public static System.Threading.Tasks.Task Run(Action doWork, Action<Exception> errorAction = null)
- {
- System.Threading.Tasks.Task task = System.Threading.Tasks.Task.Factory.StartNew(() =>
- {
- try
- {
- if (doWork != null) doWork();
- }
- catch (Exception ex)
- {
- _log.Error("ThreadHelper.Run 错误", ex);
- if (!SP.Get<IOnlineService>().GetNetStatus())
- {
- SP.Get<IUIManager>().Dispatcher.BeginInvoke(new Action(() =>
- {
- TaskDialog.Show("连接数据库失败,请联系系统管理员,给您带来不便,敬请谅解");
- }));
- }
- else
- {
- SP.Get<IUIManager>().Dispatcher.BeginInvoke(new Action(() =>
- {
- new WaitingWindow("查询失败,请联系系统管理员,给您带来不便,敬请谅解").Show();
- }));
- }
- if (errorAction != null) errorAction(ex);
- }
- });
- return task;
- }
- /// <summary>
- /// 封装Dispatcher.BeginInvoke
- /// 例:ThreadHelper.BeginInvoke(this.Dispatcher, () => { }, (ex) => { });
- /// </summary>
- /// <param name="errorAction">错误处理</param>
- public static void BeginInvoke(Dispatcher dispatcher, Action action, Action<Exception> errorAction = null)
- {
- dispatcher.BeginInvoke(new Action(() =>
- {
- try
- {
- action();
- }
- catch (Exception ex)
- {
- _log.Error("ThreadHelper.BeginInvoke 错误", ex);
- TaskDialog.Show("加载失败,请联系系统管理员,给您带来不便,敬请谅解");
- if (errorAction != null) errorAction(ex);
- }
- }));
- }
- }
- }
单线程任务 Task.Factory.StartNew 封装的更多相关文章
- Task.Factory.StartNew和Task.Run
在系统中单开线程进行操作,经常用到Task,发现Task主要有以下两种方法 Task.Factory.StartNew(() => { }); Task.Run(() => { }); 初 ...
- Task.Factory.StartNew的用法
代码: private void button5_Click(object sender, EventArgs e) { ; Task.Factory.StartNew(() => { Mess ...
- Task.Run Vs Task.Factory.StartNew
在.Net 4中,Task.Factory.StartNew是启动一个新Task的首选方法.它有很多重载方法,使它在具体使用当中可以非常灵活,通过设置可选参数,可以传递任意状态,取消任务继续执行,甚至 ...
- Task.Run Vs Task.Factory.StartNew z
在.Net 4中,Task.Factory.StartNew是启动一个新Task的首选方法.它有很多重载方法,使它在具体使用当中可以非常灵活,通过设置可选参数,可以传递任意状态,取消任务继续执行,甚至 ...
- Task.Run与Task.Factory.StartNew的区别
Task是可能有延迟的工作单元,目的是生成一个结果值,或产生想要的效果.任务和线程的区别是:任务代表需要执行的作业,而线程代表做这个作业的工作者. 在.Net 4中,Task.Factory.Star ...
- C# Task.Run 和 Task.Factory.StartNew 区别
Task.Run 是在 dotnet framework 4.5 之后才可以使用,但是 Task.Factory.StartNew 可以使用比 Task.Run 更多的参数,可以做到更多的定制.可以认 ...
- Task.Run Vs Task.Factory.StartNew 【收藏】
在.Net 4中,Task.Factory.StartNew是启动一个新Task的首选方法.它有很多重载方法,使它在具体使用当中可以非常灵活,通过设置可选参数,可以传递任意状态,取消任务继续执行,甚至 ...
- c#4.0 Task.Factory.StartNew 用法
var t1 = Task.Factory.StartNew<string>(() => { return “1111111”; }); //t1.Wait(); t1.Contin ...
- task.factory.startnew()
1.委托: public delegate int Math(int param1,int param2);定义委托类型 Public int Add(int param1,int param2)// ...
随机推荐
- MYSQL错误:You can't specify target table for update in FROM clause
这句话意思是:不能先select再更新(修改)同一个表. 可以再外嵌套多一层,这个问题只有mysql有,mssql和oracle都没有. # 出错delete from Person where Id ...
- TZOJ 4746 Xiangqi(模拟棋盘数组)
描述 Xiangqi is one of the most popular two-player board games in China. The game represents a battle ...
- TZOJ 5280 搜索引擎(模拟字符串)
描述 谷歌.百度等搜索引擎已经成为了互连网中不可或缺的一部分.在本题中,你的任务也是设计一个搜索论文的搜索引擎,当然,本题的要求比起实际的需求要少了许多. 本题的输入将首先给出一系列的论文,对于每篇论 ...
- Aactivity和Service之间的通信
一.在activity中定义三个按钮 一个开启服务 一个关闭服务,还有一个是向服务发送广播 当创建出Serevice时先执行Service的onCreate()创建服务后只执行一次 以后每次点击开启 ...
- php Pthread 多线程 (一) 基本介绍
我们可以通过安装Pthread扩展来让PHP支持多线程. 线程,有时称为轻量级进程,是程序执行的最小单元.线程是进程中的一个实体,是被系统独立调度和分派的基本单位,线程自己不拥有系统资源,它与同属 ...
- mysql非主键自增长
mysql并非只有主键才能自增长,而是设为键的列就可以设置自增长. 如下: CREATE TABLE t1 ( id INT, col1 INT auto_increment NOT NULL ) ...
- CodeSmith生成SQL Server视图的实体类脚本/对应的生成模板
C#生成sql视图的实体类 using System;using System.Text;using CodeSmith.Engine;using SchemaExplorer;using Syste ...
- 相机拍摄时最重要的三个参数——光圈、快门、ISO
注:这篇文章我四年前发布在其他地方,现在移过来. 如果你对相机只有很少了解,那么看这篇文章再好不过啦,我结合很多资料,力图用最通俗易懂的方式进行讲解. 相机拍摄时最重要的3个参数就是——光圈.快门.I ...
- url传递数据
一.post传递数据 $ci = curl_init($url); curl_setopt($ci, CURLOPT_HEADER, 0); curl_setopt($ci, CURLOPT_RETU ...
- Vue.js2 + Laravel5 采用 CORS 方式解决 AJAX 跨域的问题
一.建立中间件 php artisan make:middleware CorsAjax 二.编写中间件 CorsAjax <?phpnamespace App\Http\Middleware; ...