单线程任务 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);}}));}} }
View Code
转载于:https://www.cnblogs.com/s0611163/p/9182523.html
单线程任务 Task.Factory.StartNew 封装相关推荐
- C# Task.Run 和 Task.Factory.StartNew 区别
有小伙伴问我,为什么不推荐他使用 Task.Factory.StartNew ,因为 Task.Run 是比较新的方法. 本文告诉大家 Task.Run 和 Task.Factory.StartNew ...
- Task.Run vs Task.Factory.StartNew
Task.Run 和 Task.Factory.StartNew 都可以把一段要执行的代码放到ThreadPool thread中去执行.Task.Factory.StartNew是.Net 4.0中 ...
- Task.Factory.StartNew 和 Task.Run 到底有什么区别?
前言 Task.Factory.StartNew 和 Task.Run 都可以创建 Task: Task.Factory.StartNew(() => { Console.WriteLine(& ...
- Task.Factory.StartNew 和 Task.Factory.FromAsync 有什么区别?
咨询区 soleiljy 假设我们有一个涉及IO操作的方法 (读取数据库),这个方法支持以同步或者异步的方式执行. 同步方式 IOMethod() 异步方式 BeginIOMethod() EndI ...
- Task.Run Vs Task.Factory.StartNew z
在.Net 4中,Task.Factory.StartNew是启动一个新Task的首选方法.它有很多重载方法,使它在具体使用当中可以非常灵活,通过设置可选参数,可以传递任意状态,取消任务继续执行,甚至 ...
- c# Task.Factory.StartNew 传参数_C#/C++混合编程一二事
C#/C++混编的情形经常会碰到,下面就来讲一讲一些需要注意的点.废话不多说,Let's get started. (时间有限,暂时没有写完,后续会持续更细.如果有写的不严谨甚至错误的地方欢迎大家指正 ...
- Task.Factory.StartNewTResult 和 Task.RunTResult 到底有什么区别?
前言 这不是和<Task.Factory.StartNew 和 Task.Run 到底有什么区别?>一样吗,怎么又写一篇? 起先我也是这么觉得的,但实际发现并非如此. 实现代码 查看这 2 ...
- C# 使用Task.Factory.FromAsync将IAsyncResult、awit结合
最近在做读写示波器的工作,使用同步去读写示波器的话会阻塞线程,页面假死,这不能忍.然后改为异步,使用各种BeginXX和EndXX方法.由于那项目和示波器通信是有流程的,比如说先做事1,事1做完再做事 ...
- C#多线程之Thread,ThreadPool,Task,Parallel
总目录 文章目录 总目录 前言 一.多线程以及与之相关概念 1.基本概念 1)进程 2)线程 3)多线程 2.同步.异步 1)同步方法 2)异步方法 二.Thread 1.线程的使用 1)创建并开启线 ...
最新文章
- 在Andoird studio 中用代码实现setId报错,而在ecplise中可以,的处理方法
- ICON: 从单张图片重建穿衣服人体模型
- /proc/kcore失效,调试其文件系统相关模块,使重新正常工作
- 冲刺阶段——Day2
- TS对象中的实例属性和静态属性
- 黑马程序员---java基础------------------多线程
- linux-facl权限控制-移除-复制
- java程序员_哪些书是不可错过的?Java程序员书单分享
- c语言中*在变量的右上角,C语言中变量的声明和定义
- 【产业互联网周报】AWS 全球换帅,中国区发布战略;杨杰回应回A,中移动计划千亿投5G;全球缺芯潮持续...
- 委托 和 事件 总括:
- IBM服务器纽扣电池告警信息,IBM笔记本数字错误码信息.doc
- python点到直线的距离_点到直线距离公式的几种推导
- 信息服务器在哪里打开,internet信息服务(lls)管理器在哪里打开
- Swift基础(六)解包
- springboot奥运会志愿者管理系统
- 网页性能测试工具大全
- 深入了解scratch中的“移动10步”和(你真的了解scratch吗?scratch初学者值得一看)
- 生化危机8吸血鬼夫人暴君皮肤MOD
- 请求静态资源出现416 (Requested range not satisfiable) 错误
热门文章
- linux 采集cpu 内存,Linux环境获取(cpu、内存、网卡流量等)系统性能数据
- BZOJ——2697: 特技飞行
- STM32 解析futaba S-bus协议
- 设计模式——4.抽象工厂模式
- MySQL 去除重复的方法
- HRESULT:0x80070057 (E_INVALIDARG)的异常的解决方案
- GDI+ 学习记录(2) 画笔线帽 - Cap
- WindowsAPI中PostMessage与SendMessage的区别
- C#调用C++的dll文件方法
- IOS的OC项目下回调函数的定义以及传参