У меня действительно странная проблема с фоновым рабочим в одном из моих приложений. Недавно я слегка переделал его с помощью некоторых исправлений графического интерфейса, но теперь, когда кто-то на другом ПК запускает .exe или устанавливает мое развертывание OneClick, фоновый работник не вводит событие dowork. Логика не изменилась между двумя выпусками. Я сделал сравнение, и кроме добавления журнала ошибок ничего не изменилось.
Я зашел так далеко, что включил окна сообщений и точки останова в событие dowork, но он никогда не входит в него, кроме как на моем собственном ПК. Даже когда я удаленно отлаживаю, он не входит в событие 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 и передает ошибку для индекса, очевидно, потому что список не был заполнен, поскольку функция делает, что была пропущена. Опять же, это прекрасно работает на моем ПК, но не на других, независимо от того, как я их им предоставляю.
Спасибо за любую помощь