如何识别我在哪个线程?

时间:2016-06-28 07:19:01

标签: c# multithreading

我有两个线程正在运行并执行相同的方法。我如何区分哪一个是我目前的那个?

实施例: 我有方法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");
}

我想检测:如果第一个线程必须保存到excel文件中的sheet1,第二个线程将保留在excel文件中的sheet2

问题2:

首先,它会在第二个帖子中创建两个browserbrowser.GoToUrl(link)仅工作(两次)。

这意味着:Thread 1Thread 2创建了两个进程Chrome浏览器。但是何时只能在browser.GoToUrl(link)中使用行Thread 2Thread 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());

另外:我不知道是否使用Thread并行运行。

3 个答案:

答案 0 :(得分:3)

Azodious和Hari的建议会起作用,但我认为更好的设计方法,如果可能改变,将在执行2个线程的代码中传递工作表作为参数写入。

答案 1 :(得分:2)

您可以命名Thread.Name并将其用于识别。

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

答案 2 :(得分:1)

  

我想检测一下,如果第一个线程必须保存到excel文件中的sheet1,第二个线程会保留到excel文件中的sheet2。

创建线程时为线程指定名称。并在GetTable方法中检查该名称。

  

我不知道是否使用Thread并行运行。

在多核上,是的。