Программа завершается при возникновении события FileSystemWatcher.Changed (C #) - PullRequest
2 голосов
/ 02 августа 2011

Итак, я пытаюсь создать средство уведомления об изменении файла, и мне нужно сделать так, чтобы текст в текстовом поле обновлялся всякий раз, когда изменяется содержимое файла. Это то, что я до сих пор:

    string path = "C:/Users/Max/Dropbox/Public/IM.txt";
    StringBuilder b = new StringBuilder();
    private void Window_Loaded(object sender, EventArgs e)
    {
        TB.Text = File.ReadAllText(path);
        b.Append(TB.Text);
        FileSystemWatcher watcher = new FileSystemWatcher();
        watcher.Path = path.Remove(path.Length - 6, 6);
        watcher.NotifyFilter = NotifyFilters.LastWrite;
        watcher.Filter = "*.txt";
        watcher.Changed += new FileSystemEventHandler(OnChanged);
        watcher.EnableRaisingEvents = true;
        TB.SelectionStart = TB.Text.Length;
        TB.ScrollToCaret();
    }
    private void OnChanged(object source, FileSystemEventArgs e)
    {
        TB.Text = File.ReadAllText(path);
    }

Кажется, что это правильно вызывает событие, но как только оно касается кода в событии OnChanged, программа завершается, никаких ошибок или чего-либо еще, просто закрывается. Я пытался остановить его закрытие, я даже пытался поместить e.Cancel в событие formclosing, но, похоже, ничего не работает. Есть идеи? Я могу предоставить больше информации, если это необходимо.

Ответы [ 2 ]

5 голосов
/ 02 августа 2011

Вы пробовали обернуть код в try catch

private void OnChanged(object source, FileSystemEventArgs e)
{
    try
    {
        TB.Text = File.ReadAllText(path);
    }catch(Exception e)
    {
        //Show exception in messagebox or log to file.
    }
}
3 голосов
/ 02 августа 2011

Попробуйте это в вашем методе Changed

if (TB.InvokeRequired)
{
   TB.Invoke(new MethodInvoker(delegate { TB.Text = File.ReadAllText(path); }));
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...