2

我只是想对以下程序进行澄清:

foreach (Match match in MC)
{   
    string link = match.Groups["link"].ToString();
    if (link.Contains("ebay.de/itm/"))
    {
        int endIndex = link.IndexOf("?pt");
        link = link.Substring(0, endIndex);
        if (link != lastLink)
        {
            getEanPerLink = delegate
            {
                getEan(link);
            };
            new Thread(getEanPerLink).Start();
        }
        lastLink = link;
    }
}

当程序循环时,它会创建很多线程。我只是想问一下这些线程是结束还是自行退出。或者如果没有,我如何中止创建的每个线程?

4

2 回答 2

3

getEan当方法退出时,每个线程都将结束。如果是这样,那么您不必再做任何事情,线程和Thread对象将干净地消失。

可以中止线程,但不建议这样做,因为它会在线程正在执行的任何操作的中间引发异常。推荐的方法是与您希望它结束​​的线程进行通信,以便它可以在代码中方便的位置执行此操作。

于 2013-08-10T09:17:56.613 回答
1

将它们设置为后台线程,而不是在您关闭或中止正在运行的线程时关闭。

我的建议不要在此使用线程;方式这是使用线程的不好方法。

如果你使用 .net 4.5 使用 async await
如果你使用 .net 4 使用 Task
如果你使用 .net 3.5 使用 ThreadPool
如果你使用 .net 2 backgroundWorker

问候,
巴萨姆

于 2013-08-10T11:41:34.507 回答