2012-03-01 19 views
1

我创建了一个ThreadQueue,因为在加载期间完成了很多很多计算,因此可以更有效地加载WPF页面而不冻结主程序。线程通常访问NHibernate(我不知道,因为我工作的公司为它创建了一个包装DLL)。 。我知道这是错误的做法是错误的,但目前看来是最有效的做法。在我写过的其他线程程序中,我将使用全局变量并将它们设置为循环以使线程快速并优雅地死亡。这个程序使用许多静态类来完成大部分的计算(大的,长的计算;很多可能需要5分钟才能运行)。这就是说,将全局布尔变量放入一个静态类中可能会导致通过这些计算的许多线程中断。生成执行长计算并使用来自NHibernate的事务的线程

现在要解决的问题:中止是不好的,静态类中的全局模变量也是如此。线程的关键问题之一是死锁。在事务中间杀死一个线程会导致死锁问题?任何有关如何在静态类中进行冗长计算时优雅地杀死线程的建议?

+0

这可能不是您要查找的内容,但似乎您正在描述一个很好的用例,将这些计算密集型任务转移到某种服务(WCF和/或REST)中。如果服务不是选项,请查看[任务并行库](http://msdn.microsoft.com/zh-cn/library/dd460717.aspx)以异步方式执行此操作。至少,通过让任务以UI线程可以选择忽略的方式完成任务(如果结果不需要或不可用),让您的应用程序保持简单。这并不像我们需要让CPU内核工作变得很难。 – 2012-03-01 17:37:49

+0

@SixtoSaez:现在研究任务的东西。 UI的设计目的只是在必要时处理数据(即用户点击标签X),但即使如此,有时候您只是打开了错误的页面,流程就开始了。大多数人呆在一分钟左右,但有一些特别是很长。我一直在努力在可能的时候加速这些东西(没有常驻速度专家,我只是讨厌锁定程序,特别是当你不打算打开那个页面时)。 – 2012-03-01 17:52:33

回答

1

使用TasksCancellationTokens会更好。 This link可能有帮助