我对多线程有一个基本的cs主要理解,但在应用程序中除了简单的定时器之外从未做过任何事情.有没有人知道一个好的资源,它将让我参观如何使用多线程应用程序,解释基础知识,并可能构成一些更困难的东西?
这是约瑟夫·阿尔巴哈里的一个很好的免费资源.在C#中线程化
两篇很棒的文章:
每个开发人员必须了解的多线程应用程序
了解低锁技术在多线程应用程序中的影响
虽然这篇文章并不完全是您正在寻找的内容,但它通常会有所帮助(即它是相关的,并且是一个非常好的阅读):
免费午餐结束:软件并发的根本转向
有四种基本方法可以同步.Net中的线程:
BackgroundWorker控件
WaitHandles
回调函数
轮询ASyncResult对象
通常,您希望从该列表的顶部开始并向下工作.这意味着首先要查看背景工作者控件是否适合这种情况.但是,它几乎假设Windows窗体并且您只生成一个新线程.
所以接下来尝试等待.Waithandles适合协调多个线程.你可以全力以赴,等待它们全部完成,或者如果你想保持一定数量的活跃,你就会一直等待一个并在完成后产生下一个.或许你知道一个线程会很快完成,所以你可以等待它完成,做一些工作,然后等待其余的完成.
Waithandles看起来有点像,比如说,你只是产生了一个额外的线程,你不想阻止它直到它完成.然后你可以使用一个回调,这样一旦线程完成就会调用你指定的函数.
最后,当且仅当由于某种原因上述任何一项都不起作用时,您可以回退到投票.
我可以想出5种不同的方法来获取.Net中的新线程,也大致按顺序:
操作系统创建,通常是winforms事件的结果(包括BackgoundWorker).
Obj.Begin ___()/结束____().某些CLR类已经为您定义了这些异步方法,显然您希望在它们可用时使用它们.
ThreadPool.QueueUserWorkItem().大多数时候使用它来创建自己的线程.
Delegate.BeginInvoke()/ EndInvoke会().你可以用这种方式包装任何方法.
Thread.Start().你可以这样做,但我最近读了一些东西(现在没有链接),如果QueueUserWorkItem不起作用,委托方法可能更好.