Фоновый рабочий процесс C # не запускает событие dowork на любом компьютере, кроме моего собственного

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

Спасибо за любую помощь.

6
задан Brandonm 24 November 2011 в 08:01
поделиться