11 矿工小浪

尚未进行身份认证

暂无相关简介

等级
TA的排名 42w+

Task中的跨线程访问控件和UI耗时任务卡顿的解决方法

//普通方法private void btnUpdate_Click(object sender, EventArgs e){ Task task = new Task(() => { this.lblInfo.Text = "来自Task的数据更新:我们正在学习多线程!"; }); //task.Start(); //这样使用会...

2019-11-02 21:52:56

监视锁:Lock 限制线程个数的一把锁

//为什么要用锁?在多线程中,尤其是静态资源的访问,必然会有竞争private static int nums = 0;private static object myLock = new object();static void Method12(){ for (int i = 0; i < 5; i++) { Task.Factory.Star...

2019-11-02 21:42:38

Task中专门的异常处理:AggregateException

//AggregateException:是一个异常集合,因为Task中可能抛出异常,所以我们需要新的类型来收集异常对象static void Method11(){ var task = Task.Factory.StartNew(() => { var childTask1 = Task.Factory.StartNew(() => ...

2019-11-02 21:32:56

Task中的取消功能:使用的是CacellationTokenSoure解决多任务中协作取消和超时取消方法

//【1】Task任务的取消和判断static void Method8(){ //创建取消信号源对象 CancellationTokenSource cts = new CancellationTokenSource(); Task task = Task.Factory.StartNew(() => { while (!cts...

2019-11-02 21:23:58

Task常见枚举 TaskCreationOptions(父子任务运行、长时间运行的任务处理)

//请大家通过Task的构造方法,观察TaskCreationOptions这个枚举的类型,自己通过F12查看static void Method6(){ Task parentTask = new Task(() => { Task task1 = new Task(() => { Thread...

2019-11-02 21:02:30

Task的阻塞方式和任务延续

//【1】回顾之前使用Thread多个子线程执行时阻塞的方法static void Method2(){ Thread thread1 = new Thread(() => { Thread.Sleep(2000); Console.WriteLine("Child Thread (1)......"); }); Thre...

2019-11-02 20:43:03

Task多线程任务的开启3种方式

//【1】通过new的方式创建一个Task对象,并启动static void Method1_1(){ Task task1 = new Task(() => { //在这个地方编写我们需要的逻辑... Console.WriteLine($"new一个新的Task启动的子线程Id={Thread.CurrentThread.Mana...

2019-11-02 20:35:08

Thread的生命周期

public partial class FrmThread : Form{ public FrmThread() { InitializeComponent(); } private Thread thread = null; private int counter = 0; //【1】开启 private void...

2019-11-02 19:37:11

通过跨线程访问控件

1、 通过跨线程给控件赋值private void button1_Click(object sender, EventArgs e){ Thread thread = new Thread(()=> { for(int i = 0; i < 10; i++) { //this.label1.Text = i.T...

2019-11-02 19:00:13

TimeSpan

TimeSpan表示一段时间间隔或是一天内的时间。对于后者,它就是一个时钟时间(不包括日期)。它等同于从午夜开始到现在的时间(假设没有夏令时)。TimeSpan的最小单位为100纳秒,最大值为一千万天,可以为正数也可以为负数。一、创建TimeSpan的三种方法1、通过它的一个构造器public TimeSpan(long ticks);public TimeSpan(int h...

2019-10-30 20:57:34

Stopwatch类的使用

Stopwatch类提供了一种方便的机制来测量运行时间。Stopwatch使用了操作系统和硬件提供的最高分辨率机制,通常少于1毫秒(相比之下DateTime.Now和Environment.TickCount的分辨率在15毫秒左右)。要使用Stopwatch,可以调用StartNew方法。这将会实例化一个Stopwatch对象并开始计时(此外,也可以先实例化,再手动调用Start方法)。Elap...

2019-10-20 08:23:44

元组的声明和赋值的示例代码

using System;namespace TupleDemo{ class Program { static void Main(string[] args) { //1、将元组赋值给单独声明的变量 (string country1, string capital1, double gdpP...

2019-10-19 23:01:08

var与dynamic

var和dynamic类型表面上相似,但实际上是非常不同的:1.var说:“让编译器去确定我的类型吧”2.dynamic说:“让运行时去确定我的类型吧”例如:dynamic x = "hello"; // 静态类型是dynamic,运行时类型是stringvar y = "hello"; // 静态类型是string,运行时类型是stringint i = x; ...

2019-10-19 21:46:04
勋章 我的勋章
  • 持之以恒
    持之以恒
    授予每个自然月内发布4篇或4篇以上原创或翻译IT博文的用户。不积跬步无以至千里,不积小流无以成江海,程序人生的精彩需要坚持不懈地积累!
  • 勤写标兵Lv3
    勤写标兵Lv3
    授予每个自然周发布7篇到8篇原创IT博文的用户。本勋章将于次周周三上午根据用户上周的博文发布情况由系统自动颁发。