2017-01-24 4 views
0

この単純なコードはC#ですべての対象ディレクトリとそのサブフォルダを検索しますが、処理中はGUIフォームと対話できません。このコードで実装する:c#スキャンディレクターとそのサブフォルダの間にBackgroundWorkerを使用

var dir = textBox1.Text = folderBrowserDialog1.SelectedPath; 
    textBox2.Text=""; 
    string[] extensions = { ".htm", ".html" }; 
    var files = Directory.EnumerateFiles(dir, "*.*",SearchOption.AllDirectories) 
    .Where(s => s.EndsWith(".html") || s.EndsWith(".htm")).OrderBy(f => f); 

       foreach (string file in files) 
       { System.Diagnostics.Debug.WriteLine(file); 
        textBox2.AppendText(file+Environment.NewLine); 
       } 

答えて

0

あなたはこのリンクを読んでいますか?これは通常、ProgressChangedイベントハンドラで達成されるのBackgroundWorkerで(他のスレッドからGUIを更新するに注意してください:https://msdn.microsoft.com/en-us/library/3s8xdz5c(v=vs.110).aspx

+0

はよく私がループ文句を言わない作業を動作しませんでした試してみました一度だけその停止 – jsem

0

決して、心、私は解決策が見つかりました:

void BackgroundWorker1DoWork(object sender, DoWorkEventArgs e) 
    { 
      string[] extensions = { ".htm", ".html" }; 
      var files = Directory.EnumerateFiles(folderBrowserDialog1.SelectedPath, "*.*", SearchOption.AllDirectories) 
     .Where(s => s.EndsWith(".html") || s.EndsWith(".htm")).OrderBy(f => f); 


      foreach (string file in files) 
      { 
      Thread.Sleep(5); 
      System.Diagnostics.Debug.WriteLine(file); 
       backgroundWorker1.ReportProgress(0,file+Environment.NewLine); 
      } 


    } 
    void BackgroundWorker1ProgressChanged(object sender, ProgressChangedEventArgs e) 
    { 

     textBox2.AppendText(e.UserState as string); 

    } 
関連する問題