2016-06-28 81 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

相关问题