2012-03-01 17 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可能有幫助