C#应用程序意外关闭!

时间:2011-06-03 07:17:46

标签: c#-4.0

我遇到了一个非常令人沮丧的问题。我有一个c#win应用程序。当我单击按钮时,程序在执行click事件处理程序后自行关闭。即使我已经调试了代码,但遗憾的是我看不到任何错误,它只是退出程序。

我哪里错了?

以下是代码:

private void btnOpenFolder_Click(object sender, EventArgs e)
    {
            DialogResult dg = fd1.ShowDialog();
            if (dg == DialogResult.OK)
            {
                lblInput.Text = fd1.SelectedPath;
                btnOpenFolder.Enabled = false;
                timerCallback = new TimerCallback(tmrQualityEvent);
                tmrQuality = new System.Threading.Timer(timerCallback, null, 0, 1000);
                Thread qualityThread = new Thread(new ThreadStart(QualityMapOpenFolder));
                qualityThread.Start();
                QualityMapOpenFolder();
            }
    }

void QualityMapOpenFolder()
    {
        fileList.Clear();
        string path = lblInput.Text;
        if (Directory.Exists(path))
        {
            foreach (var file in Directory.GetFiles(path))
            {
                if (Path.GetExtension(file) != ".kml")
                {
                    fileList.Add(file);
                }
            }
            SetProgressBarValue(0);
            ChangeFileNameLabel(fileList[0]);
            FileName = fileList[0];
        }
        else
            SetText("Please make sure you have correctly set the open folder path!", true);

        dataListQuality = GetInputData();

        SetText("Calculated Data has been created, please click process files...", false);
        SetProcessButtonStatus(true);
    }

2 个答案:

答案 0 :(得分:3)

将事件处理程序附加到UnhandledException handler并记录它。应该可以帮助您找出应用程序崩溃的原因。

更新:现在您已发布了一些代码:

  1. 您似乎更新了您启动的另一个线程的UI元素。您应该只从创建它们的线程(通常是主线程)访问UI组件。考虑使用BackgroundWorker
  2. 你在一个线程上启动QualityMapOpenFolder方法,然后你在启动线程后也调用它 - 这看起来有点奇怪,可能有一些意想不到的副作用。

答案 1 :(得分:0)

这种行为的常见原因是后台线程中未处理的异常。为了防止程序。

@ChrisWue写了关于如何检测这种异常的文章。

此外,Windows应用程序日志通常可以提供有关未处理错误的信息。

在这种情况下,请参阅here如何防止杀死应用。