我已经全局声明了一个线程
私有(private)线程 _ftpthread ;
该线程用于上传图片到ftp
在我的函数中我用过
private void uploadImage()
{
...
...
_ftpthread = new Thread(() => sendThumbsToFTP(path,image));
_ftpthread.Start();
_ftpthread = new Thread(() => sendThumbsToFTP(path2,image2));
_ftpthread.Start();
...
...
}
我的问题是我可以像这样初始化线程吗?第一个线程是否会在重新初始化时终止? 还是两者都会被执行?
最佳答案
回答您的问题:
我可以像这样初始化线程吗?
当然可以,为什么不呢?
第一个线程是否会在重新初始化时终止?还是两者都会被执行?
两者都会被执行,第一个线程会简单地运行完成。
_ftpthread
字段只是对已创建线程的引用,不应该有任何隐藏的语义来覆盖引用 - 除了失去引用它的能力。因此,您的代码几乎* 等同于:
private Thread _ftpthread;
private void uploadImage()
{
//...
new Thread(() => sendThumbsToFTP(path,image)).Start();
_ftpthread = new Thread(() => sendThumbsToFTP(path2,image2));
_ftpthread.Start();
//...
}
*我说几乎是因为在多线程环境中,另一个线程有可能在原始代码中的两个赋值之间访问 _ftpthread
并获取对第一个线程创建。但是,如果没有其他线程访问 _ftpthread
,则代码片段是等效的。
关于C#线程在运行时重新初始化,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/25498379/