2011-06-02 108 views
0

我有一个服务票据管理应用程序,用户希望在MDI框架的选项卡上打开多个票据详细信息。由于此应用程序必须通过Web XML服务与其他公司进行通信,因此需要大约15〜20秒。最抱怨的用户是他需要等到保存过程完成。光标正在工作,而数据正在保存,其他无法完成。长时间运行过程vb.net

从其他窗口保存数据时,让用户打开其他窗口并执行其他操作或保存数据的最有效方法是什么?

顺便说一下,这是VB.Net/Windows应用程序。

回答

1

您可以使用BackgroundWorker或新线程。我个人会尝试使用内置的异步方法,如BeginInvoke的

http://www.developer.com/net/vb/article.php/1443981/Asynchronous-Web-Services-for-Visual-Basic-NET.htm

请记住,异步操作很快变得复杂,好desighned在非常重要的。

+0

BackgroundWorker或新线程有什么区别? – Hoorayo 2011-06-03 21:32:44

+0

@Hoorayo:BackgroundWorker在单独的线程上执行操作。阅读我提供的参考... – 2011-06-04 05:26:59

+1

一个新线程是BackgroundWorker的一个rawer版本。工作者封装了一个新的线程,但提供了简单的方法来启动/停止/取消工作。它还会引发事件,以便它可以更轻松地向主线程报告进度。就像我在文章中所说的那样,虽然已经有了BeginInvoke方法,您可以使用它来删除对新线程的需求。 – pingoo 2011-06-06 08:58:41

0

我已经写了一个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