2016-10-22 4 views
0

FTPサーバーをチェックしてディレクトリのすべてのファイルを一覧表示するアプリケーションで作業していますが、 。 最初の問題は、BackGroundワーカーからListViewにアクセスできない、別の方法(Arrayでリストを保存してからBackGround Worker Process Completeで更新)を使用しましたが、それはうまくいきませんでした。 次に、私は隠されていた同じ機能を実行する別のフォームを使用しましたが、プログラムは依然としてFTPファイルのリストを表示しませんでした。 実際、このディレクトリのファイル(ftp://blah/subdir/[filesはここにあります)をListView1にリストしたいだけです。 UIをフリーズしないとどうなるでしょうか?私はバックグラウンドワーカーを使用しようとしましたが、動作しませんでした。どのように動作させることができますか? はここでコードListViewのFTPからListViewのFTPからBackGround Workerを使ってファイルを一覧表示する

機能

public string[] ListDirectory() 
    { 
     string hostdir = textBoxX2.Text + textBoxX3.Text; 
     var request = createRequest(hostdir,WebRequestMethods.Ftp.ListDirectory); 
     using (var response = (FtpWebResponse)request.GetResponse()) 
     { 
      using (var stream = response.GetResponseStream()) 
      { 
       using (var reader = new StreamReader(stream, true)) 
       { 
       while (!reader.EndOfStream) 
       { 
       listView1.Items.Add(reader.ReadLine()); 
       } 
      } 
     } 
     } 
     List<string> l = new List<string>(); 
     return l.ToArray(); 
} 
private FtpWebRequest createRequest(string uri, string method) 
    { 
     var r = (FtpWebRequest)WebRequest.Create(uri); 
     r.Credentials = new NetworkCredential(textBoxX4.Text, textBoxX5.Text); 
     r.Method = method; 
     return r; 
    } 

作品上記のコードである。しかしUIをフリーズする、と私は、バックグラウンドワーカーを使用する場合、同じように動作していない機能のいくつかは、それが上か、似たような作成されたオブジェクトからListView1のにアクセスすることはできません。

どれヘルプおくる... おかげ

答えて

1

あなたがこのアプローチを試みることができる - Invokeが適切なスレッド上でアクション実行します:あなたのケースでは

string line = reader.ReadLine(); 
listView1.Invoke((MethodInvoker)delegate { 
    listView1.Items.Add(line); // runs on UI thread 
}); 

を、あなたは上ではありません知っていますUIスレッドが、あなたはどちらかのUIスレッドまたはワーカースレッドから呼び出される可能性の機能を持っている場合、あなたはInvokeRequiredをチェックする必要があります。

string line = reader.ReadLine(); 
if (listView1.InvokeRequired) { 
    listView1.Invoke((MethodInvoker)delegate { 
     listView1.Items.Add(line); // runs on UI thread 
    }); 
} 
else { 
    // we're already on UI thread - work on ListView1 directly 
    listView1.Items.Add(line); 
} 
+0

本当にありがとう、これは完璧に働いたが、何について。そして..? – SHoCK

+0

どうすれば削除できますか?そして.. [DOTS] – SHoCK

+0

私はこのFTP要求が返す文字列の形式に慣れていませんが、ディレクトリ名がどこにあるかを知ることができれば、 '.'または' .. '。 –

関連する問題