Приложение просто закрывается (без ошибок или чего-либо) при запуске из VS2010 - PullRequest
3 голосов
/ 04 марта 2011

Проблема в том, что приложение закрывается без ошибок, VS остается открытым. У меня есть несколько динамически созданных FileSystemWatchers, все они имеют обработчик событий для события «Создано». Таким образом, этот метод обработчика событий выглядит следующим образом:

void watcher_FileCreated(object sender, FileSystemEventArgs e)
{
    FileInfo f1 = new FileInfo(e.FullPath);
    filesDataGrid.Rows.Add(f1.Name);
    foreach (TLPclass table in parameterForm.getParameters)
    {
       //uses some funcion form another class
    }
}

Строка, которая вызывает закрытие программы, - это та, в которой я добавляю имя файла в DataGridView - filesDataGrid.Rows.Add(f1.Name); Также работает нормально без этой строки. Странно то, что приложение работает нормально, когда запускается из .exe файла в папке проектов. Я не вижу ошибки в своем коде, но я предполагаю, что с ним что-то ужасно не так, даже если оно даже не показывает сообщение об ошибке. И - каковы наиболее распространенные причины, по которым программа может просто закрыться без предупреждений?

Ответы [ 2 ]

2 голосов
/ 04 марта 2011

FileSystemWatcher будет запускать события в отдельном потоке. Логика внутри обработчиков событий должна учитывать этот факт и выполнять любую необходимую синхронизацию. Так что вам нужно что-то вроде этого:

private void watcher_FileCreated(object sender, FileSystemEventArgs e)
{
    if (filesDataGrid.InvokeRequired)
    {
        filesDataGrid.Invoke((MethodInvoker)delegate { watcher_FileCreated(sender, e); });
    }
    else
    {
        FileInfo f1 = new FileInfo(e.FullPath);
        filesDataGrid.Rows.Add(f1.Name);
        foreach (TLPclass table in parameterForm.getParameters)
        {
           //uses some funcion form another class
        }
    }
}
0 голосов
/ 04 марта 2011

Оберните вашу функцию блоком Try {} catch (Exception ex) {}. я бы подумал, что это потому, что сначала нужно создать DataGridRow с переменными из FileSystemWatcher.

* 1003 например *

DataGridViewRow row = filesDataGrid.NewRow();

row["columnname"] = f1.name;

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