バックグラウンド ワーカーの使用方法については、 msdnおよびスタック交換に関する同様の質問を見てきました。
基本的に、私の機能のアップロードプログラムは実際の作業を行いますが、スレッドが進むにつれてUIの要素(進行状況バーなど)を変更し、イベントを送信して進行状況を変更したいと考えています。私が試したことは以下のとおりです (厳しく編集されています)。動作せず、runworkerasync の呼び出し後にプログラムが切断されたようです。何か単純な問題がありますか、それとも私のコマンドを「他のスレッドに」送信するのが間違っていましたか?
BackgroundWorker backgroundUpload = new System.ComponentModel.BackgroundWorker();
最初のビットは呼び出しです:
if (backgroundUpload.IsBusy != true)
{
backgroundUpload.RunWorkerAsync(work);
// a command here for debug purposes (eg a message box) will run
}
else
{ //it doesn't go here, this isn't the error}
それからドワーク、ここにたどり着くようには見えません。
private void backgroundUpload_DoWork(object sender, DoWorkEventArgs e)
{
BackgroundWorker worker = sender as BackgroundWorker;
e.Result = UploadProgram((Workload)e.Argument, worker, e); //workload is one of my enums
}
ここにも到達しないようです。
bool UploadProgram(Workload work, BackgroundWorker worker, DoWorkEventArgs e)
{
}
//also there is progress changed and run worker complete.