C#在运行时重新启动线程

时间:2014-08-26 05:01:54

标签: c# multithreading

我已全局声明了一个帖子

private Thread _ftpthread ;

此线程用于将图像上传到ftp

在我的功能中我使用了

 private void uploadImage()
{

...
...
_ftpthread = new Thread(() => sendThumbsToFTP(path,image));
_ftpthread.Start();

_ftpthread = new Thread(() => sendThumbsToFTP(path2,image2));
_ftpthread.Start();
...
...
}

我的问题是我可以像这样初始化线程吗?是否在重新初始化时终止第一个线程? 或两者都将被执行?

2 个答案:

答案 0 :(得分:2)

回答你的问题:

  • 我可以像这样初始化线程吗?

    当然,为什么不呢?

  • 重新初始化时是否终止第一个线程?或两者都将被执行?

    两者都将被执行,第一个线程将完全运行。


_ftpthread字段只是对创建的线程的引用,并且不应该有任何隐藏的语义来覆盖引用 - 除了丢失引用它的能力。因此,您的代码几乎等于 *

private Thread _ftpthread;

private void uploadImage()
{
    //...
    new Thread(() => sendThumbsToFTP(path,image)).Start();

    _ftpthread = new Thread(() => sendThumbsToFTP(path2,image2));
    _ftpthread.Start();

    //...
}

* 我说几乎是因为在多线程环境中,另一个线程有可能在原始代码中的两个赋值之间访问_ftpthread并获得对创建的第一个线程的引用。但如果没有其他线程访问_ftpthread,则代码片段是等效的。

答案 1 :(得分:1)

两者将一起执行,并且在听到2个线程将一起运行, 并且第一次将不会终止。

你可以创建这样的方法,如果你想使用直接使用Thread的TPL

private void uploadImage() {
    Parallel.Invoke(
        () => sendThumbsToFTP(path,image),
        () => sendThumbsToFTP(path2,image2));
}

您也可以看到此链接http://msdn.microsoft.com/en-us/library/ff963549.aspx以了解如何使用任务。