2017-10-09 6 views
1

ユーザーがサーバーにデータをインポートするアプリケーションがあります。したがって、ユーザーが[インポート]ボタンをクリックすると、CSVファイルが選択されます。アプリケーションがデータをデータベースに保存し始めます。これは、私のアプリでこれをたくさん使っているBackgroundworkerで簡単に行うことができます。完了するために操作を待つ必要があるユーザー

しかし、私のユーザーは、操作が完了するまで待ってから別のCSVファイルをデータベースにインポートする必要があります。バックグラウンドワーカーは一度に1つの操作しかできないので、これを解決する方法はありますか?

+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

私は3つの関数を使用しています: 1.私はアプリケーションのデータベースとしてMongoDBを使用していますが、CSVデータをインポートするには 'mongoimport'を使用しました。 'mongoimport'はシステムコマンドラインでしか実行できないので' Process'を使って 'cmd prompt'を開いてそこに行を入力しています。 2.)コマンドプロンプトで、 'mongoimport'の進行状況を出力します。したがって、私は 'DataReceivedEventArgs'をチェックしています。 3.) 'DataReceivedEventArgs'のすべてのエラーや出力について、メインUIに追加しています。 私は3つの機能を持っています。これらを1つのTask.Runに追加できますか? – Hobert

+0

私の投稿にその情報を追加しなかったことを謝罪します。 – Hobert

+0

はい、できるはずですが、別々のタスクでそれらを持つことは、それぞれが独自のスレッドで実行されることを意味し、両方を完了するのにかかる時間が短くなります。 –

関連する問題