2008-09-08 141 views
7

我对多线程有一个基本的cs-major理解,但除了应用程序中的简单定时器之外,从未做过任何事情。有没有人知道一个好的资源,可以让我参观如何使用多线程应用程序,解释基础知识,也许会带来一些更难的东西?我理解线程的理论,但不是在实践中.net

回答

5

有4种基本方式的.Net同步线程:

  • BackgroundWorker的控制
  • WaitHandles
  • 回调函数
  • 轮询的ASyncResult对象

通常你想从列表顶部开始并逐渐减少。这意味着首先看看后台工作人员是否适合这种情况。但是,它几乎假定了Windows窗体,并且只是产生一个新线程。

接下来尝试waithandles。等待手柄适用于协调多个线程。你可以把它们全部踢出去并等待它们全部结束,或者如果你想保持一定数量的活动,你只需等待一个,并在结束时产生下一个。或者也许你知道一个线程会更快完成,所以你可以等待它完成,做一些工作,然后等待其余的完成。

等待处理可能看起来有点多,例如,如果你只是产生一个额外的线程,并且你不想阻塞,直到它完成。然后您可以使用回调函数,以便在线程完成后立即调用您指定的函数。

最后,当且仅当由于某种原因,以上都不会起作用,您可以退回到投票。

我能想到的5点不同的方式,以获得一个新的线程在.NET中,也大致是:创建

  • OS,通常作为的WinForms事件(包括BackgoundWorker)的结果。
  • Obj.Begin ___()/ End ____()。某些CLR类已经为您定义了这些异步方法,显然您希望在它们可用时使用它们。
  • ThreadPool.QueueUserWorkItem()。大部分时间使用这个来创建自己的线程。
  • Delegate.BeginInvoke()/ EndInvoke()。你可以用这种方法包装任何方法。
  • Thread.Start()。你可能这样做,但我最近读了一些东西(现在没有链接),如果QueueUserWorkItem不会工作的委托方法可能会更好。
1

一个我知道关于这个问题的最好的资源就是“C#线程”的书: http://www.albahari.com/threading/

我拥有所有.NET开发人员的一个很好的概述需要了解以编程多线程应用程序。