2016-06-28 82 views
1

我有兩個兩個線程運行並執行相同的方法。我如何區分哪一個是我目前的?如何識別我在哪個線程?

例如: 我有方法GetTable()會返回新的DataTable dt有數據。

public void GetTable() 
{ 
    browser = new Lapsoft_OneDriver(Browsers.Chrome, 0); 
    browser.GoToUrl(link); 

    DataTable dt; 
    if(thread == 1) 
     ExcelSave(dt, "sheet1"); 

    else if(thread == 2) 
     ExcelSave(dt, "sheet2"); 
} 

我想檢測:如果第一個線程必須保存到sheet1在excel文件,第二個線程保持到sheet2在Excel文件。

問題2:

首先,它會創建兩個browser,並browser.GoToUrl(link)唯一的工作(兩次)在第二個線程。

這意味着:Thread 1Thread 2是創建兩個過程的Chrome瀏覽器。但是何時行browser.GoToUrl(link)只在Thread 2工作。 Thread 2執行代碼browser.GoToUrl(link)兩次。

我的代碼,如:

Thread tid1 = new Thread(new ThreadStart(GetTable)); 
    Thread tid2 = new Thread(new ThreadStart(GetTable)); 

    tid1.Start(); 
    tid2.Start(); 

我所用:

Parallel.Invoke(() => GetTable(),() => GetTable());

另外:我不知道,如果使用的線程中運行並行。

回答

3

Azodious的和Hari的建議,將工作,但我認爲一個更好的設計方法,如果有可能改變,將是在執行2個線程通過表寫入作爲參數的代碼。

+0

您可以添加示例代碼嗎?謝謝。 – vanloc

+1

類似這樣的:'public void GetTable(string sheetToStore) { browser = new Lapsoft_OneDriver(Browsers.Chrome,0); browser.GoToUrl(link); DataTable dt; ExcelSave(dt,sheetToStore); }' 另外,在你正在調用這個函數的代碼中,如果可能的話,我會推薦使用'Tasks'來代替。這是更好,更清潔使用 –

+0

我更新了我的問題(問題2)。你能看到更多嗎? – vanloc

1

我想檢測,如果第一個線程必須保存到excel文件中的sheet1,第二個線程保留到excel文件中的sheet2。

在創建線程時將名稱分配給線程。並在您的GetTable方法中檢查該名稱。

我不知道如果使用線程並行運行。

在多核上,是的。

+0

你能看到我的問題已更新嗎?使用線程時遇到問題。 – vanloc

2

您可以命名Thread.Name並將其用於識別。

if(Thread.CurrentThread.Name == "Thread1") 
    { 
     // logic 
    } 
    else 
    { 
     // else logic 
    } 
+0

謝謝。但我的答案有問題。你能看到:'首先,它會創建兩個瀏覽器,而browser.GoToUrl(鏈接)只能在第二個線程中工作(兩次)。「這意味着:「線程1」和「線程2」是創建兩個進程的Chrome瀏覽器。但是,何時去'browser.GoToUrl(link)'行只能在'Thread 2'中工作。 'Thread 2'執行兩次'GoToUrl'。 – vanloc

+0

線程創建在哪裏?請介意調用創建一個'browser'或調用'GoToUrl'不會創建線程。除非我們看到您的代碼,否則很難提出建議。 –

+0

我在'Main'中創建了線程,並且有兩個線程調用方法'GetTable()'。在'GetTable()'我試圖建立新的流程瀏覽器和導航鏈接。但似乎在'線程2'中工作。 – vanloc

相關問題