我有一個服務票據管理應用程序,用戶希望在MDI框架的選項卡上打開多個票據詳細信息。由於此應用程序必須通過Web XML服務與其他公司進行通信,因此需要大約15〜20秒。最抱怨的用戶是他需要等到保存過程完成。光標正在工作,而數據正在保存,其他無法完成。長時間運行過程vb.net
從其他窗口保存數據時,讓用戶打開其他窗口並執行其他操作或保存數據的最有效方法是什麼?
順便說一下,這是VB.Net/Windows應用程序。
我有一個服務票據管理應用程序,用戶希望在MDI框架的選項卡上打開多個票據詳細信息。由於此應用程序必須通過Web XML服務與其他公司進行通信,因此需要大約15〜20秒。最抱怨的用戶是他需要等到保存過程完成。光標正在工作,而數據正在保存,其他無法完成。長時間運行過程vb.net
從其他窗口保存數據時,讓用戶打開其他窗口並執行其他操作或保存數據的最有效方法是什麼?
順便說一下,這是VB.Net/Windows應用程序。
您可以使用BackgroundWorker或新線程。我個人會嘗試使用內置的異步方法,如BeginInvoke的
請記住,異步操作很快變得複雜,好desighned在非常重要的。
我已經寫了一個Web服務,這是解決方案的一部分,其需要走下車和運行一種需要相當長時間才能完成的方法。經過一番嘗試,我決定在Web服務中的新線程中啓動長時間運行的任務並將自定義對象返回給調用應用程序(稍後使用)是最簡單的。
<WebMethod()> Public Function StartChecks() As ResponseItem
Dim t As New Thread(New ThreadStart(AddressOf Me.StartWork))
t.Start()
Return New ResponseItem(CheckGUID.ToString)
End Function
BackgroundWorker或新線程有什麼區別? – Hoorayo 2011-06-03 21:32:44
@Hoorayo:BackgroundWorker在單獨的線程上執行操作。閱讀我提供的參考... – 2011-06-04 05:26:59
一個新線程是BackgroundWorker的一個rawer版本。工作者封裝了一個新的線程,但提供了簡單的方法來啓動/停止/取消工作。它還會引發事件,以便它可以更輕鬆地向主線程報告進度。就像我在文章中所說的那樣,雖然已經有了BeginInvoke方法,您可以使用它來刪除對新線程的需求。 – pingoo 2011-06-06 08:58:41