2017-09-15 15 views
0

私のプロジェクトでは、特定のディレクトリ内にファイルを作成した後にテキストボックス内のテキストを変更するメソッドをトリガする必要があります。FileSystemWatcherを作成した後でWindowsフォームにアクセスする際の問題

。したがって、私はFileSystemWatcherを使用し、あなたがここに見ることができるように、それにEventHandlerのを追加しました:

private void watch() 
    { 

     watcher = new FileSystemWatcher(); 
     watcher.Path = path; 
     watcher.Filter = "*.osr"; 
     watcher.Created += new FileSystemEventHandler(OnChanged); 
     watcher.EnableRaisingEvents = true; 
    } 

ファイルが作成された後、FileSystemWatcherが正常メソッドをトリガーしますが、私が欲しい時にエラーが発生しますテキストボックスにアクセスします。

textBox.Text = path; //Error here 

エラーは次のとおりです。...「System.InvalidOperationExceptionが」と、それは私が別のスレッドからWindowsFormsにアクセスしようとしているが、私は別のスレッドを作成したことがないことを、言う

楽しい事があり、手動でファイル全体を開くボタンもあります(ファイルを手動で開くこともできます)。

なぜそれが別のスレッドにあるのか、それを修正する方法を教えてもらえますか?

おかげ

答えて

2

現在、FileSystemWatcherは1つのスレッドにあり、UIは別のスレッドにあります。

BeginInvokeを使用して呼び出す必要があるため、UIの同じスレッドで「管理」されます。このような

何か:

public partial class Form1 : Form 
{ 
    delegate void FileCreationUpdater(FileSystemEventArgs evt); 
    FileSystemWatcher watcher = null; 
    public Form1() 
    { 
     InitializeComponent(); 

     // instantiate a new FileSystemWatcher 
     watcher = new FileSystemWatcher(Environment.GetFolderPath(Environment.SpecialFolder.MyDocuments)) 
     { 
      // and starts it right away 
      EnableRaisingEvents = true 
     }; 

     // create a new updater delegate 
     FileCreationUpdater updater = new FileCreationUpdater(TextBoxUpdater); 

     // when receiving Created events, Invoke updater. 
     watcher.Created += (s, e) => 
     { 
      /// passing parameter to the invoked method 
      textBox1.BeginInvoke(updater, e); 
     }; 
    } 

    public void TextBoxUpdater(FileSystemEventArgs evt) 
    { 
     /// update path 
     textBox1.Text = evt.FullPath; 
    } 
} 
0

FileSystemWatcherは別のスレッドで実行するようにだけではなくディレクトリで検索を行う他のスレッドからのパスを読んで、変更されているかを確認しようとしています。急いで申し訳ありませんので、完全な答えを与えることはできません。

+0

[OK]を、それはエラーに答えるが、私は全体の時間をチェックする必要があり、毎回新しいファイルが、私は方法をトリガーする必要が作成されますので。どういうわけか、他のスレッドからでもwindowsformsのテキストを変更できますか? –

関連する問題