Сбой приложения с ошибкой. - PullRequest
0 голосов
/ 16 марта 2012

У меня есть приложение Winform, которое запускает все файлы в списке, Я использую DLL-библиотеки Pcapdotnet для отправки пакетов в мой сетевой адаптер, процесс в том, что я беру файл захвата Wireshark и с этим файлом отправляем все пакеты. каждый файл будет работать с BackgroundWorker и после его завершения в следующий раз в моем списке srart для запуска и т. д. Я добавил флажок, и когда этот флажок в проверенном состоянии, все файлы запускаются одновременно. при запуске моего приложения происходит сбой с ошибкой: исключение было вызвано целью вызова в:

static void Main()
{
    Adapters addr = new Adapters();
    Application.EnableVisualStyles();
    Application.SetCompatibleTextRenderingDefault(false);
    Application.Run(new mainWindow());
}

ошибка, полученная в последней строке (Application.Run (new mainWindow ());)

это мой код, который обрабатывает одновременный запуск:

        for (int i = 0; i < listBoxFiles.Items.Count; i++)
        {
            string filePath  = (string)listBoxFiles.Items[i];
            playCount = 0;

            BackgroundWorker bgWsim = new BackgroundWorker();
            bgWsim.WorkerReportsProgress = true;
            bgWsim.ProgressChanged += new ProgressChangedEventHandler(bgW_ProgressChanged);
            bgWsim.DoWork += new DoWorkEventHandler(
            (s3, e3) =>
            {
                while ((playCount < numberOfLoops) && (bContinuePlay)) //play the capture
                {
                    for (int k = 0; (k < listBoxFiles.Items.Count) && (bContinuePlay); k++)
                    {
                        class = new myClass(filePath , playSpeed);

                        class.evePacketProgress += new class.dlgPacketProgress(
                            (progressCount) =>
                            {
                                bgWsim.ReportProgress(progressCount, class);
                            });

                        if (selectedAdapter != null)
                        {
                            bContinuePlay = class.playCapture(selectedAdapter._packetDevice);
                        }

                        playCount++;
                        Thread.Sleep((int)delay);
                    }
                }
            });

            bgWsim.RunWorkerCompleted += new RunWorkerCompletedEventHandler(
            (s3, e3) =>
            {
                groupBoxSelect.Enabled = true;
                groupBoxOptions.Enabled = true;
                groupBoxInfo.Enabled = true;
                btnPlay.Enabled = true;
            }
            );

            bgWsim.RunWorkerAsync();
        }

как я могу отладить эту ошибку и найти проблему?

скриншот ошибки:

http://i42.tinypic.com/2ainbqp.jpg

Ответы [ 2 ]

0 голосов
/ 16 марта 2012

Я думаю, что проблема в событии RunWorkerCompleted, так как оно вызывается асинхронным потоком. Вам нужно отредактировать элементы управления из Windows Forms в их собственном потоке, это можно сделать, вызвав элемент управления.

Пример: (с лямбдой)

        private static void runOnThread(Control x, Action logic)
    {
        if (x.InvokeRequired)
        {
            x.Invoke(logic);
        }
        else
        {
            logic();
        }
    }

Вы будете называть это следующим образом:

runOnThread(groupBoxSelect,() => groupBoxSelect.Enabled = true );
0 голосов
/ 16 марта 2012

A ProgressBar имеет свойства Maximum и Minumum, которые используются для определения диапазона значений, которые он будет принимать (по умолчанию от 0 до 100).Если вы попытаетесь установить для свойства Value число, выходящее за пределы диапазона, оно выдаст исключение ArgumentException.Смотри здесь .

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...