2012-04-28 11 views
-1

私はこのような機能を持っているを使用してリストビューから項目を取得:[i]のスレッド

foreach (ListViewItem item in getListViewItems(listView2)) //for proxy 
{ 
    if (reader.Peek() == -1) 
    { 
     break; 
    } 

    lock (reader) 
    { 
     line = reader.ReadLine(); 
    } 


    //proxy code 
    List<string> mylist = new List<string>(); 
    if (item != null) 
    { 
     for (int s = 0; s < 3; s++) 
     { 
      if (item.SubItems[s].Text != null) 
      { 
       mylist.Add(item.SubItems[s].Text); 
      } 
      else 
      { 
       mylist.Add(""); 
      } 
     } 
    } 
    else 
    { 
     break; 
    } 
    //end proxy code 


    //some other code including the threadpool 
} 

とデリゲートコード:

private delegate ListView.ListViewItemCollection GetItems(ListView lstview); 
private ListView.ListViewItemCollection getListViewItems(ListView lstview) 
{ 
    ListView.ListViewItemCollection temp = new ListView.ListViewItemCollection(new ListView()); 
    if (!lstview.InvokeRequired) 
    { 
     foreach (ListViewItem item in lstview.CheckedItems) 
     { 
      temp.Add((ListViewItem)item.Clone()); 
     } 
     return temp; 
    } 
    else 
    { 
     return (ListView.ListViewItemCollection)this.Invoke(new GetItems(getListViewItems), new object[] { lstview }); 
    } 
} 

はEDIT:

私はそれのforeachを交換したいですメイン関数のループを条件付き関数で返します。

if (reader.Peek() == -1) 
{ 
    break; 
} 

lock (reader) 
{ 
    line = reader.ReadLine(); 
} 


if (use_proxy == true) 
{ 
    mylist2 = get_current_proxy(); 
} 

//some other code including the threadpool 

private List<string> get_current_proxy() 
{ 
    //what shall I add here? 
} 

この関数をforeachループと同じようにすることはできますが、forループを使用することはできますか?プロキシを1つずつ取得することを意味します...

答えて

1

私は電子メールのためにウェブサイトをスクラップし、その後スパムするというアイデアを中心に、複数の質問を巡っています。あなたはすでにそれのための非常にクールなツールを持って、新しいものの必要はありません。とにかく

- 私はあなたの質問を理解していない、そして私がここだけではないんだけど、あなたが何かする前に知っておく必要がありますものがあるようです:

は、Windowsで何かを持ってInvoke()を実行するときに、複数のスレッドで実行する必要があります。すべてが1つのスレッドを通過してメッセージループを保持するまで待機する必要があります。だから、複数のスレッドからListViewの読み書きを試みることができますが、読み書きを行うにはInvoke()が必要です(おそらく、直接BAAAAMを試したことがあります)。そして、すべてのInvoke()には、すべてのスレッドは自分のターンを待つ必要があります。

次:ListViewをあなたのデータのコンテナにすることはとても悪いことです。これ以上コメントすることはできません。あなたのデータを保持するために

class MyData 
{ 
    public string Name; 
    public string URL; 
    // ... 
} 

List<MyData> _myData; 

ような何かを考えてみましょう。キーの少ない同期に関する問題を処理する場合は、複数のスレッドからアクセスできます。

最後に、文法がわからなくても.net C#プログラミングに関する質問をどうやって聞かせてください。まあ、それは修辞的な...

関連する問題