C#线程在运行时重新初始化

标签 c# multithreading

我已经全局声明了一个线程

私有(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/

相关文章:

java - 永远在后台运行服务

c# - 我如何在 Visual Studio 中将多线程应用程序调试为单线程

c# - Oracle 对过度索引表的更新语句

java - C# 中用于 Java DES 加密的等效代码?

c# - WebSocket 安全连接自签名证书

c++ - 如果一个线程在关键部分调用 Acquire(),如果另一个线程调用 Release(),该锁是否会被释放?

c++ - 线程参数的高效快速方法

java - 用于生成名称的多线程

c# - Fluent NHibernate (ASP.NET MVC) 中的枚举类型不匹配

c# - 将 UserControl 添加到 C# 中的变量位置