我已全局声明了一个帖子
private Thread _ftpthread ;
此线程用于将图像上传到ftp
在我的功能中我使用了
private void uploadImage()
{
...
...
_ftpthread = new Thread(() => sendThumbsToFTP(path,image));
_ftpthread.Start();
_ftpthread = new Thread(() => sendThumbsToFTP(path2,image2));
_ftpthread.Start();
...
...
}
我的问题是我可以像这样初始化线程吗?是否在重新初始化时终止第一个线程? 或两者都将被执行?
答案 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以了解如何使用任务。