• λ我爱Aspx >> Asp.Net >> 在.NET客户端程序中应用多线程
  • 在.NET客户端程序中应用多线程

  • :aspxer  Դ:internet  :2007-5-31 2:19:26  ؼ:.net
  • 下面的两行代码创建一个委托实例,代表了一个Count方法,接下来的调用排队等候让线程池中的方法进行回调。

    WaitCallback async = new WaitCallback(Count);

    ThreadPool.QueueUserWorkItem(async, count);

    ThreadPool.QueueUserWorkItem 的两个方法让你在队列中定义一个异步回调方法,然后立即返回。 同时线程池监视这个队列,接着出列方法,并使用线程池中的一个或多个线程调用该方法。这是CLR@#@#@#@#s线程池的主要用法。

    CLR@#@#@#@#s线程池也被系统的其它APIs所使用。例如, System.Threading.Timer对象在定时间隔到来时将会在线程池中排队等候回调。 ThreadPool.RegisterWaitForSingleObject 方法当响应内核系统同步对象有信号时会在线程池中排队等候调用。最后,回调由类库中的不同异步方法执行,这些异步方法又由CLR@#@#@#@#s线程池来执行。

    一般来说,一个应用程序仅仅对于简单的异步操作需要使用多线程时毫无疑问应该使用线程池。相比较手工创建一个线程对象,这种方法是被推荐的。调用ThreadPool.QueueUserWorkItem执行简单,而且相对于重复的手动创建线程来说能够更好的利用系统资源。

    最简单的线程同步

    在本栏目开始我就称保持线程同步而不互相冲突是一门艺术。Figure 3 所示的FlawedMultiThreadForm.cs应用程序有一个问题:用户可以通过单击按钮引发一个很长的响铃操作,他们可以继续单击按钮而引发更多的响铃操作。如果不是响铃,该长操作是数据库查询或者在进程的内存中进行数据结构操作,你一定不想在同一时间内,有一个以上的线程做同样的工作。最好的情况下这是系统资源的一种浪费,最坏的情况下会导致数据毁灭。

    最容易的解决办法就是禁止按钮一类的用户交互元素;两个进程间的通信稍微有点难度。过一会我将给你看如何做这些事情。但首先,让我指出所有线程同步使用的一些线程间通信的形式-从一个线程到另一个线程通信的一种手段。稍后我将讨论大家所熟知的AutoResetEvent对象类型,它仅用在线程间通信。

    Ҷƪл˵?
  • һƪ线程的实现
    һƪ在你的服务器端代码中使用线程和创建异步处理