アプリケーションの1つで、バックグラウンドワーカーに非常に奇妙な問題が発生しています。最近、いくつかのGUI修正を使用して少しオーバーホールしましたが、別のPCで誰かが.exeを実行するか、OneClickデプロイメントをインストールすると、バックグラウンドワーカーがdoworkイベントに参加しなくなりました。2つのリリース間でロジックは変更されていません。私は比較を行いましたが、エラーログを追加する以外に何も変更されていません。
doworkイベントにメッセージボックスとブレークポイントを含めるところまで行ってきましたが、自分のPC以外の場所には決して入りません。リモートデバッグしても、DoWorkイベントに参加しません
助言がありますか?
ボタンをクリックすると、runworkerasyncイベントも呼び出されます
private void ScanButton_Click_1(object sender, RoutedEventArgs e)
{
Scan = new BackgroundWorker();
Scan.WorkerReportsProgress = true;
Scan.DoWork += new DoWorkEventHandler(Scan_DoWork);
Scan.ProgressChanged += new ProgressChangedEventHandler(Scan_ProgressChanged);
Scan.RunWorkerCompleted += new RunWorkerCompletedEventHandler(Scan_RunWorkerCompleted);
Scan.RunWorkerAsync();
}
以下は、DoWorkイベントを実行するコードです。簡単にするために、他の機能を削除しました。文字列を返し、それをscanresultsというリスト内に配置する関数を実行するだけです。
private BackgroundWorker Scan;
public void Scan_DoWork(object sender, DoWorkEventArgs e)
{
System.Windows.Forms.MessageBox.Show("Inside the DoWork");
BackgroundWorker bw = sender as BackgroundWorker;
float percentageDone = 0.0F;
ScanResults = new List<string>();
try
{
System.Windows.Forms.MessageBox.Show("Doing first scan check");
ScanResults.Add(Functions.LocalComputerName());
percentageDone = ((1 / 1f) * 100f);
bw.ReportProgress((int)percentageDone);
}
catch (Exception ex)
{
System.Windows.MessageBox.Show(ex.Message, "Error Encountered", MessageBoxButton.OK, MessageBoxImage.Exclamation);
}
}
public void Scan_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
try
{
if (ScanResults.Count == 0)
{
System.Windows.Forms.MessageBox.Show("Empty");
return;
}
MachineNameBox.Text = ScanResults[0];
}
catch (Exception ex)
{
System.Windows.MessageBox.Show(ex.Message, "Error Encountered", MessageBoxButton.OK, MessageBoxImage.Exclamation);
}
}
doworkイベントを完全に無視し、runworkercompleteイベントに入り、関数doがスキップされたためにリストが埋められていないため、明らかにインデックスのエラーを渡します。繰り返しますが、これは私のPCでは完全に機能しますが、他のPCにどのようにリリースしても、他のPCでは機能しません。
助けてくれてありがとう