2011-01-19 23 views
2

我需要在c#中编写一个应用程序,用于跟踪多个任务,每个任务都被实现为一个在其自己的线程上运行的类实例。用户界面将用于显示每个任务实例的状态,具体取决于从树视图中选择哪个任务来显示任务列表。编写一个多线程C#应用程序

我有一个想法是创建一些其他类,称为PropertyClass,它将有一个TaskClass的实例和与此TaskClass实例有关的一些属性。然后,无论何时TaskClass实例更改其状态,PropertyClass实例中的相关属性都会更新,然后当从Tree View列表中选择任务时,将使用PropertyClass中的这些属性值更新UI。

可能有数百个正在运行的任务将与远程机器上的服务进行通信。

我还可以如何以高效的方式编码此解决方案?

回答

1

我有几点建议。

首先,您需要一种方法来确保您不会因阻塞您的应用的线程关闭而结束。确保所有线程都是后台线程的一个可靠的方法是确保所有线程都是后台线程。如果您必须确保线程的工作在加入或中止前完成,那么这可能会有点问题。

其次,你可以看看使用ThreadPool类,这应该使创建和使用线程更有效。线程池可以帮助您管理线程。

第三,您需要一种方法来同步从GUI访问数据到其他线程中的数据。在WPF中使用Dispatcher,在WinForms中使用Invoke。

第四,如果BackgroundWorker类适合您的应用程序的模型,它可以帮助所有这些类。第五,事件和委托可以是BeginInvoked,它基本上把它们放在另一个线程上。这是一种隐含的多线程,可以是有用的。

第六,我还没有机会使用它,.Net 4有可能对您有用的并行任务库。

第七,安全共享数据访问和同步可以使用锁定和/或监视来完成。

希望这会有所帮助。

-Nate

0

如果每个TaskClass实例对应的树形图的一个节点,你可以存储在树视图项的标签属性TaskClass实例。或者,您可以创建一个TaskClasses的字典,由一个唯一标识符(例如GUID)作为键,并将标识符存储在Tag属性中。

在任何一种情况下,都使用回调方法来指示TaskClass实例有更新。