Приложение C # неожиданно закрыто! - PullRequest
0 голосов
/ 03 июня 2011

У меня очень неприятная проблема.У меня есть приложение ac # 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 ]

3 голосов
/ 03 июня 2011

Присоедините обработчик событий к обработчику UnhandledException и зарегистрируйте его. Должно помочь вам выяснить причину сбоя вашего приложения.

Обновление : Теперь, когда вы отправили код:

  1. Похоже, вы обновляете элементы пользовательского интерфейса из другого потока, который вы запускаете. Вы должны получать доступ к компонентам пользовательского интерфейса только из потока, в котором они были созданы (обычно из основного потока). Рассмотрите возможность использования BackgroundWorker
  2. Вы запускаете метод QualityMapOpenFolder в потоке, а затем вызываете его после запуска потока - это выглядит немного странно и, возможно, имеет некоторые неожиданные побочные эффекты.
0 голосов
/ 03 июня 2011

Распространенной причиной такого поведения является необработанное исключение в фоновом потоке. Для предотвращения программы.

@ ChrisWue написал о том, как обнаружить такого рода исключения.

Кроме того, часто журнал приложений Windows дает представление о необработанных ошибках.

См. здесь , как предотвратить уничтожение приложения в этом случае.

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