2015-11-26 6 views
1

У меня есть этот код, который должен содержать richTextBox2 постоянно обновляется Используется содержимое Path, но это не так.Как я могу постоянно обновлять RichTextBox с помощью TXT-файла?

private void watch() 
    { 
     var usedPath = Path.Combine(Directory.GetCurrentDirectory(), "usedwords.txt"); 

     FileSystemWatcher watcher = new FileSystemWatcher(); 
     watcher.Path = usedPath; 
     watcher.NotifyFilter = NotifyFilters.LastWrite; 
     watcher.Filter = "*.txt*"; 
     watcher.Changed += new FileSystemEventHandler(OnChanged); 
     watcher.EnableRaisingEvents = true; 
    } 

    private void OnChanged(object source, FileSystemEventArgs e) 
    { 
     string usedPath = Path.Combine(Directory.GetCurrentDirectory(), "usedwords.txt"); 
     richTextBox2.LoadFile(usedPath, RichTextBoxStreamType.PlainText); 
    } 

Может кто-нибудь помочь мне выяснить, что я имею не так?

ответ

0

Задача 1: Ваш watcher.Path = путь к одному файлу, который вызовет ошибку.

Решение: Посмотрите на это: Use FileSystemWatcher on a single file in C#

watcher.Path = Path.GetDirectoryName(filePath1); 
watcher.Filter = Path.GetFileName(filePath1); 

Задача 2: Доступ к richTextBox2 в OnChanged() вызовет ошибку кросс-нить

Решение: Используйте:

private void OnChanged(object source, FileSystemEventArgs e) 
{ 
    Invoke((MethodInvoker)delegate 
    { 
      string usedPath = Path.Combine(Directory.GetCurrentDirectory(), "usedwords.txt"); 
      richTextBox2.LoadFile(usedPath, RichTextBoxStreamType.PlainText);  
    }); 
} 

Задача 3: При попытке LoadFile может возникнуть ошибка, пока некоторые другие программы записывают на нее.

(Возможные) Решение: положить в Thread.Sleep(10), прежде чем пытаться LoadFile в OnChanged

private void OnChanged(object source, FileSystemEventArgs e) 
    { 
     Thread.Sleep(10); 
     Invoke((MethodInvoker)delegate 
     { 
      richTextBox1.LoadFile(usedPath, RichTextBoxStreamType.PlainText); 
     }); 
    } 

Мой полный код:

public partial class Form1 : Form 
{ 
    string usedPath = @"C:\Users\xxx\Desktop\usedwords.txt"; 

    public Form1() 
    { 
     InitializeComponent(); 
     watch(); 
    } 

    private void watch() 
    { 
     FileSystemWatcher watcher = new FileSystemWatcher(); 
     watcher.Path = Path.GetDirectoryName(usedPath); 
     watcher.Filter = Path.GetFileName(usedPath); 
     watcher.NotifyFilter = NotifyFilters.LastWrite; 
     watcher.Changed += new FileSystemEventHandler(OnChanged); 
     watcher.EnableRaisingEvents = true; 
    } 

    private void OnChanged(object source, FileSystemEventArgs e) 
    { 
     Thread.Sleep(10); 
     Invoke((MethodInvoker)delegate 
     { 
      richTextBox1.LoadFile(usedPath, RichTextBoxStreamType.PlainText); 
     }); 
    } 
} 
+0

Я сделал изменения, вы говорили о том, хотя она до сих пор не работа к сожалению. – Asubaba

+0

Я только что добавил 3-ей возможную проблему. Могу я узнать, какую ошибку вы получаете? – interceptwind

+0

Я не верю, что у меня возникают ошибки. – Asubaba

Смежные вопросы