2017-10-09 83 views
1

我有一个应用程序,用户将数据导入到我的服务器。所以,当用户点击导入按钮时,选择CSV文件 - 应用程序将开始将数据保存到我的数据库。这可以在Backgroundworker上轻松完成 - 在我的应用程序中使用了很多。用户需要等待操作完成

但是,问题是我的用户在将另一个CSV文件导入数据库之前需要等待操作完成。因为,我认为,后台工作者一次只能执行一项操作,有什么方法可以解决这个问题吗?

+1

如果你的目标是最近版本的框架,你可以使用'Async'和'Await'(即TAP模式)。使用[TAP](https://docs.microsoft.com/en-us/dotnet/standard/asynchronous-programming-patterns/task-based-asynchronous-pattern-tap),这种事情可以做得很多更可读的时尚。 –

+0

您可以使用进度条为用户提供操作正在执行的反馈。 – CiccioRocca

回答

1

我假设你不希望你的用户等待,所以一个简单的答案会是这样的。 Task.Run每次执行时都会创建一个新线程,所以最简单的形式就是可以做到这一点 - 通常关于更新UI的注意事项。

Private Sub SaveCSV() 
    Task.Run(Sub() 
       'code to save csv 
      End Sub) 

End Sub 

Private Sub LoadCSV() 
    Task.Run(Sub() 
       'code to load csv 
      End Sub) 
End Sub 
+0

我有三个函数,我使用: 1.)我使用MongoDB作为我的应用程序的数据库,并且为了导入CSV数据,我使用了'mongoimport'。由于'mongoimport'只能通过系统命令行运行,因此我使用'Process'来打开'cmd提示符并在那里输入行。 2.)在命令提示符下,我想获得'mongoimport'进程的输出。因此,我正在检查它的'DataReceivedEventArgs'。 3.)对于'DataReceivedEventArgs'的每个错误和/或输出,我将它附加到我的主UI上。 所以,我得到了三个函数。我可以在一个Task.Run上添加这些吗? – Hobert

+0

对于我的帖子中没有添加该信息,我表示歉意。 – Hobert

+0

是的,你应该可以,但让他们分开执行任务意味着每个人都可以在自己的线程上运行,而且完成这​​两项任务所需的时间会更少。 –