我的一个应用程序中的后台工作人员遇到了一个非常奇怪的问题。我最近对它进行了一些 GUI 修复,但现在当另一台 PC 上的某人运行 .exe 或安装我的 OneClick 部署时,后台工作人员不会进入 dowork 事件。两个版本之间的逻辑没有改变。我做了一个比较,除了添加更多错误日志之外,没有任何改变。
我已经在 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 上完美运行,但在其他人上不管我如何发布它。
感谢您的帮助