澳门在线威尼斯官方 > 澳门在线威尼斯官方 > 澳门在线威尼斯官方异步一些利用,task和timer达

原标题:澳门在线威尼斯官方异步一些利用,task和timer达

浏览次数:102 时间:2019-10-14

这个类也很简单,在微软官方文档可以查看如何使用。
C#的timer,本身就封装了线程的操作,所以使用timer不用考虑再开一个线程,它已经是了。

1.这个是我UI的响应一下后要异步的执行一个东东。多线程、异步看的糊里糊涂,看到一句话说的挺好的“异步是目的,多线程是手段”大有拨开云雾见日出的意思。
这里我用的是线程池。将线程安放在线程池里,需使用ThreadPool.QueueUserWorkItem()方法,该方法的原型如下: 
//将一个线程放进线程池,该线程的Start()方法将调用WaitCallback代理对象代表的函数 
public static bool QueueUserWorkItem(WaitCallback); 
//重载的方法如下,参数object将传递给WaitCallback所代表的方法
public static bool QueueUserWorkItem(WaitCallback, object); 
注意: ThreadPool类是一个静态类,你不能也不必要生成它的对象。而且一旦使用该方法在线程池中添加了一个项目,那么该项目将是无法取消的。在这里你无需自己建立线程,只需把你要做的工作写成函数,然后作为参数传递给ThreadPool.QueueUserWorkItem()方法就行了,传递的方法就是依靠WaitCallback代理对象,而线程的建立、管理、运行等工作都是由系统自动完成的,你无须考虑那些复杂的细节问题。

定时器使用的两种场合:
(1)隔段时间操作一次。比如写日志,隔个0.5秒写一次。
(2)到点执行。这和你间隔的时间有关,并且需要在定时器中进行判断,比如你08:00执行一次操作,你的时间间隔是60秒,那你可以在定时器中判断DateTime.Now>=08:00&&DateTime.Now<08:01,这样就能保证你每天只在8点到8点1分内执行操作,每天只执行一次。

3、以前把一个03的程序改成05的时候就遇到了这种问题。这次我没隔一段时执行的代码中有时候会有个反馈到UI上,就又遇到这个问题。看到大家的解决方案主要有:
第一:
Control.CheckForIllegalCrossThreadCalls = false;
线程开始的时候加这么一句,OK,看不到错误了~
啥都能用了~

这代码很好理解,开启一个线程,在线程里面永远循环,每次打印1后该线程停1秒后继续判断while(true),为真后继续执行。

System.Timers.Timer定时器不同于System.Windows.Forms.Timer定时器,System.Timers.Timer定时器的定时事件的响应函数并不是在调用定时器Start方法的线程中去执行。

我们可以使用task来完成程序中的异步操作,也可以使用task来制作一个定时器。

4.数据安全问题

代码如下:     
   private void Send()       
  {             
     ThreadPool.QueueUserWorkItem(new WaitCallback(SendRecord));//无参数                      ThreadPool.QueueUserWorkItem(new WaitCallback(SendRecord),"参数");//有参数。       
  }        
  private void SendRecord(object obj)            //定义这个函数的时候必有object的参数        
  {            
   Thread.Sleep(3000);       
  } 
调用这个异步执行的时候就用Send(),而真正要干的代码放在SendRecord()里面。

1.Timer本身就是多线程

        //实际的操作
        private void returnSchool()
        {
            this.textBox1.Text = "xx"+i.ToString();
        }

2.Task实现定时器

很久不写了,原因是自己很懒。本来打算把前段时间在台湾弄的GoogleMap的总结一下。可是那边用的vs2008回来我的电脑装的都是2005,又懒得把程序转化了。呵~
 最近需要几个功能用到了多线程、异步、等等总结一下。会说的一下几个问题: 
1、前台UI响应后开个其他的线程干别的。
2、每隔一段时间做点事 
3、非UI线程咋访问UI上的控件啊。

3.定时器的使用场合

            if (s.counter == 5)
            {
                //使用Change方法改变了时间间隔
澳门在线威尼斯官方 ,                (s.tmr).Change(10000, 2000);
                Console.WriteLine("changed");
            }

本文由澳门在线威尼斯官方发布于澳门在线威尼斯官方,转载请注明出处:澳门在线威尼斯官方异步一些利用,task和timer达

关键词:

上一篇:没有了

下一篇:没有了