我試圖正常關閉我的應用程序。我的應用程序使用數據綁定,訪問數據庫幾次,並可能有一些先天的威脅運行。使用數據綁定和線程關閉WPF應用程序
由於Application.Current.Shutdown()
沒有關閉在這種情況下的一切,我看着Application.Current.Dispatcher.BeginInvokeShutdown()
。
BeginInvokeShutdown()
需要一個System.Windows.Threading.DispatcherPriority
參數。這可以是:
Invalid
- 枚舉值是-1。這是一個無效的優先事項。Inactive
- 枚舉值爲0.不處理操作。SystemIdle
- 枚舉值爲1.當系統空閒時處理操作。ApplicationIdle
- 枚舉值爲2.操作在應用程序空閒時處理。ContextIdle
- 枚舉值爲3.在後臺操作完成後處理操作。Background
- 枚舉值爲4.在所有其他非空閒操作完成後處理操作。Input
- 枚舉值爲5.操作按照與輸入相同的優先級進行處理。Loaded
- 枚舉值爲6.操作在佈局和渲染完成時處理,但在處理輸入優先級的項目之前處理。具體來說,這在提升Loaded事件時使用。Render
- 枚舉值爲7.以與渲染相同的優先級處理的操作。DataBind
- 枚舉值爲8.操作的處理優先級與數據綁定相同。Normal
- 枚舉值是9.操作按正常優先級處理。這是典型的應用優先級。Send
- 枚舉值爲10.在其他異步操作之前處理操作。這是最高優先級。
現在,假設我的應用程序只在出現問題時才關閉。這意味着應用程序無需完成任何操作,只需要進行原始關閉,以便用戶可以重新啓動應用程序。我是否正確地說我必須給Inactive
作爲參數?如果我將Send
作爲參數,是否屬實,在完全關閉之前一切都已完成?
因此,當我想關閉我的應用程序和它的所有線程時,我必須手動將每個屬性設置爲'isBackground'?沒有其他辦法了? – Joetjah 2013-02-27 10:17:51
您不能將現有的線程作爲後臺線程。它必須在啓動之前設置。你現在怎麼創建你的線程?如果您使用線程池方法,則可以將它們全部默認爲後臺線程。如果他們長時間運行(這可能是保持應用程序活躍的更可能的原因),那麼我們大概有多少人在談論? – JRoughan 2013-02-27 22:20:47
我在很多地方都有線程運行,我在通過整個解決方案進行搜索時會注意到。我將不得不將它們全部改寫爲Backgroudn線程。這將如何影響我的表現?我認爲我的問題儘可能回答,謝謝。 – Joetjah 2013-02-28 08:35:35