代码:

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 封装相关推荐

  1. C# Task.Run 和 Task.Factory.StartNew 区别

    有小伙伴问我,为什么不推荐他使用 Task.Factory.StartNew ,因为 Task.Run 是比较新的方法. 本文告诉大家 Task.Run 和 Task.Factory.StartNew ...

  2. Task.Run vs Task.Factory.StartNew

    Task.Run 和 Task.Factory.StartNew 都可以把一段要执行的代码放到ThreadPool thread中去执行.Task.Factory.StartNew是.Net 4.0中 ...

  3. Task.Factory.StartNew 和 Task.Run 到底有什么区别?

    前言 Task.Factory.StartNew 和 Task.Run 都可以创建 Task: Task.Factory.StartNew(() => { Console.WriteLine(& ...

  4. Task.Factory.StartNew 和 Task.Factory.FromAsync 有什么区别?

    咨询区 soleiljy 假设我们有一个涉及IO操作的方法 (读取数据库),这个方法支持以同步或者异步的方式执行. 同步方式 IOMethod() 异步方式 BeginIOMethod()  EndI ...

  5. Task.Run Vs Task.Factory.StartNew z

    在.Net 4中,Task.Factory.StartNew是启动一个新Task的首选方法.它有很多重载方法,使它在具体使用当中可以非常灵活,通过设置可选参数,可以传递任意状态,取消任务继续执行,甚至 ...

  6. c# Task.Factory.StartNew 传参数_C#/C++混合编程一二事

    C#/C++混编的情形经常会碰到,下面就来讲一讲一些需要注意的点.废话不多说,Let's get started. (时间有限,暂时没有写完,后续会持续更细.如果有写的不严谨甚至错误的地方欢迎大家指正 ...

  7. Task.Factory.StartNewTResult 和 Task.RunTResult 到底有什么区别?

    前言 这不是和<Task.Factory.StartNew 和 Task.Run 到底有什么区别?>一样吗,怎么又写一篇? 起先我也是这么觉得的,但实际发现并非如此. 实现代码 查看这 2 ...

  8. C# 使用Task.Factory.FromAsync将IAsyncResult、awit结合

    最近在做读写示波器的工作,使用同步去读写示波器的话会阻塞线程,页面假死,这不能忍.然后改为异步,使用各种BeginXX和EndXX方法.由于那项目和示波器通信是有流程的,比如说先做事1,事1做完再做事 ...

  9. C#多线程之Thread,ThreadPool,Task,Parallel

    总目录 文章目录 总目录 前言 一.多线程以及与之相关概念 1.基本概念 1)进程 2)线程 3)多线程 2.同步.异步 1)同步方法 2)异步方法 二.Thread 1.线程的使用 1)创建并开启线 ...

最新文章

  1. 在Andoird studio 中用代码实现setId报错,而在ecplise中可以,的处理方法
  2. ICON: 从单张图片重建穿衣服人体模型
  3. /proc/kcore失效,调试其文件系统相关模块,使重新正常工作
  4. 冲刺阶段——Day2
  5. TS对象中的实例属性和静态属性
  6. 黑马程序员---java基础------------------多线程
  7. linux-facl权限控制-移除-复制
  8. java程序员_哪些书是不可错过的?Java程序员书单分享
  9. c语言中*在变量的右上角,C语言中变量的声明和定义
  10. 【产业互联网周报】AWS 全球换帅,中国区发布战略;杨杰回应回A,中移动计划千亿投5G;全球缺芯潮持续...
  11. 委托 和 事件 总括:
  12. IBM服务器纽扣电池告警信息,IBM笔记本数字错误码信息.doc
  13. python点到直线的距离_点到直线距离公式的几种推导
  14. 信息服务器在哪里打开,internet信息服务(lls)管理器在哪里打开
  15. Swift基础(六)解包
  16. springboot奥运会志愿者管理系统
  17. 网页性能测试工具大全
  18. 深入了解scratch中的“移动10步”和(你真的了解scratch吗?scratch初学者值得一看)
  19. 生化危机8吸血鬼夫人暴君皮肤MOD
  20. 请求静态资源出现416 (Requested range not satisfiable) 错误

热门文章

  1. linux 采集cpu 内存,Linux环境获取(cpu、内存、网卡流量等)系统性能数据
  2. BZOJ——2697: 特技飞行
  3. STM32 解析futaba S-bus协议
  4. 设计模式——4.抽象工厂模式
  5. MySQL 去除重复的方法
  6. HRESULT:0x80070057 (E_INVALIDARG)的异常的解决方案
  7. GDI+ 学习记录(2) 画笔线帽 - Cap
  8. WindowsAPI中PostMessage与SendMessage的区别
  9. C#调用C++的dll文件方法
  10. IOS的OC项目下回调函数的定义以及传参