当前位置:  开发笔记 > 编程语言 > 正文

我理解在理论上的线程,但在.net中没有实践

如何解决《我理解在理论上的线程,但在.net中没有实践》经验,为你挑选了3个好方法。

我对多线程有一个基本的cs主要理解,但在应用程序中除了简单的定时器之外从未做过任何事情.有没有人知道一个好的资源,它将让我参观如何使用多线程应用程序,解释基础知识,并可能构成一些更困难的东西?



1> Gulzar Nazim..:

这是约瑟夫·阿尔巴哈里的一个很好的免费资源.在C#中线程化



2> Jason Buntin..:

两篇很棒的文章:

每个开发人员必须了解的多线程应用程序
了解低锁技术在多线程应用程序中的影响

虽然这篇文章并不完全是您正在寻找的内容,但它通常会有所帮助(即它相关的,并且是一个非常好的阅读):

免费午餐结束:软件并发的根本转向



3> Joel Coehoor..:

有四种基本方法可以同步.Net中的线程:

BackgroundWorker控件

WaitHandles

回调函数

轮询ASyncResult对象

通常,您希望从该列表的顶部开始并向下工作.这意味着首先要查看背景工作者控件是否适合这种情况.但是,它几乎假设Windows窗体并且您只生成一个新线程.

所以接下来尝试等待.Waithandles适合协调多个线程.你可以全力以赴,等待它们全部完成,或者如果你想保持一定数量的活跃​​,你就会一直等待一个并在完成后产生下一个.或许你知道一个线程会很快完成,所以你可以等待它完成,做一些工作,然后等待其余的完成.

Waithandles看起来有点像,比如说,你只是产生了一个额外的线程,你不想阻止它直到它完成.然后你可以使用一个回调,这样一旦线程完成就会调用你指定的函数.

最后,当且仅当由于某种原因上述任何一项都不起作用时,您可以回退到投票.

我可以想出5种不同的方法来获取.Net中的新线程,也大致按顺序:

操作系统创建,通常是winforms事件的结果(包括BackgoundWorker).

Obj.Begin ___()/结束____().某些CLR类已经为您定义了这些异步方法,显然您希望在它们可用时使用它们.

ThreadPool.QueueUserWorkItem().大多数时候使用它来创建自己的线程.

Delegate.BeginInvoke()/ EndInvoke会().你可以用这种方式包装任何方法.

Thread.Start().你可以这样做,但我最近读了一些东西(现在没有链接),如果QueueUserWorkItem不起作用,委托方法可能更好.

推荐阅读
拾味湖
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有