2017-07-26 3 views
0

私はエクセルから巨大なデータを取得し、EFを使用してデータベースに保存するExcelアップロードを持つMVC5アプリケーションを持っています。私はbackgroundworkerを使用してアップロードし、進捗状況を取得しています。ユーザーがファイルアップロードの途中で他のリンクやページの更新をクリックしたときに他のファイルをアップロードすると、新しいアップロードの途中で前の進捗状況が表示されます。前のプロセスが殺されていないということです。この問題を解決するには?mvc5のページリフレッシュまたはページクローズ時にバックグラウンドワーカーを停止するにはどうすればいいですか?

bwProcess = new BackgroundWorker{ WorkerReportsProgress = true, WorkerSupportsCancellation = true }; 
bwProcess.DoWork += new DoWorkEventHandler(bwProcess_DoWork); 
bwProcess.ProgressChanged += new ProgressChangedEventHandler(bwProcess_ProgressChanged); 
bwProcess.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bwProcess_RunWorkerCompleted)‌​; 
Task.Run(() => bwProcess.RunWorkerAsync("AsyncWorker2")); 
+0

bwProcess =新規のBackgroundWorker {WorkerReportsProgress =真、 WorkerSupportsCancellation =真 }。 bwProcess.DoWork + =新しいDoWorkEventHandler(bwProcess_DoWork);サブタイプ: bwProcess.RunWorkerCompleted + =新しいRunWorkerCompletedEventHandler(bwProcess_RunWorkerCompleted); Task.Run(()=> bwProcess.RunWorkerAsync( "AsyncWorker2")); –

+1

FWIWは、ベストプラクティスとして、バックグラウンドワーカーはWebアプリケーションには適していません。チェックアウト:https://www.hanselman.com/blog/HowToRunBackgroundTasksInASPNET.aspx – leemac

答えて

0

良いオプション​​でTaskを使用して、プロセス内の静的インスタンスや「グローバル」インスタンスと不注意なことはありません。

ルックで:

var task3 = new Task(() => MyLongRunningMethod(), 
        TaskCreationOptions.LongRunning); 
task3.Start(); 
関連する問題