2016-07-07 6 views
-1

각 스레드가 다른 URL을 실행하게하고 싶습니다.C에서 두 개의 스레드 이름을 가진 두 개의 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}이 있습니다. 링크 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

관련 문제