应用程序崩溃并出现错误目标已抛出异常

时间:2012-03-16 16:04:18

标签: c# winforms

我有运行listbox中所有文件的Winform应用程序, 我正在使用Pcapdotnet DLL将数据包发送到我的网络适配器,过程是我正在使用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 :(得分:0)

ProgressBar具有MaximumMinumum属性,用于定义它将接受的值范围(默认值为0到100)。如果您尝试将Value属性设置为范围之外的数字,则会抛出ArgumentException。请参阅here

答案 1 :(得分:0)

我认为问题是RunWorkerCompleted事件,因为它是由异步线程调用的。你需要在自己的线程上编辑来自Windows Forms的控件,你可以通过调用控件来完成。

示例:(使用lambda)

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

您可以将其称为以下内容:

runOnThread(groupBoxSelect,() => groupBoxSelect.Enabled = true );