2016-07-07 5 views
-1

それぞれのスレッドで異なるURLを実行したい。Cで2つのスレッド名を持つ2つのUrlを実行する#

私はこのようなコードを記述します。

static void Main() 
{ 
    var t1 = new Thread(new ThreadStart(RegisterLink)) 
    { 
     Name = "Thread1" 
    }; 
    t1.Start(); 

    var t2 = new Thread(new ThreadStart(RegisterLink)) 
    { 
     Name = "Thread2" 
    }; 
    t2.Start(); 
    t1.Join(); 
    t2.Join(); 
} 
static bool start_Link() 
{ 
    int idx = int.Parse(Thread.CurrentThread.Name.Replace("Thread", "")) - 1; 
    try 
    { 
     foreach (DataRow dtRow in dtLink.Rows) 
     { 
      link[idx] = dtRow["get_link"].ToString(); 
      browser_array[idx].DeleteAllCookies(); 
      browser_array[idx].GoToUrl(link[idx]); 
     } 
    } 
} 

static void RegisterLink() 
{ 
    int idx = int.Parse(Thread.CurrentThread.Name.Replace("Thread", "")) - 1; 
    try 
    { 
     switch (stepRun[idx]) 
     { 
      case 0: 
       start_new(); 
       break; 
      case 1: 
       compare(); 
       break; 
     } 
    } 
    catch 
    { 
     ExitALL(); 
     return; 
    } 
} 

dtLinkは、DataTableには、すべてのリンクが含まれています。

例:リンク{0:google.com、1:reddit.com}が2つあります。リンク1を開くのはreddit.comだけです。

スレッドを使用するときにデバッグを試すのに多くの時間がかかります。

+0

ループを明確にすることはできますか?あなたは決してdc変数を使用していません。より多くのコードを使用する前に、あるスレッドのコードをテストしてください。 –

+0

私の質問が更新されました。私は不要なコードを削除することを忘れないでください。 – vanloc

+0

'idx'をインクリメントしないので、同じオブジェクト' browser_array [idx] 'が各行に使われます。 –

答えて

0

オブジェクト[]を使用すると、スレッドに引数を渡すことができます。

例えば、

static bool start_link(object data) 
{ 
    object [] arguments = data as object[]; 
    int idx = (int) arguments[0]; 
} 


Thread t1 = new Thread(start_link) { Name = "Thread 1"}; 
t1.Start(new object[]{ 0 }); 
+0

申し訳ありません。 RegisterLink()から 'start_link'を呼び出します。コードを変更する必要がありますか?私のアップデートの質問を見てください。 – vanloc

関連する問題