C#多线程报错:The destination thread no longer exists.

WinForm,C#多线程报错:

System.ComponentModel.InvalidAsynchronousStateException: 'An error occurred invoking the method. The destination thread no longer exists.'

研究一番,找到了原因:

有问题的写法:

cs 复制代码
new Thread(new ThreadStart(scan)).Start();

private void scan()
{      
    //...
    addForm(name);  //该方法内部会另外启动Thread         
    Thread.Sleep(3000);    
    new Thread(new ThreadStart(scan)).Start();
}

原因,一开始用独立线程调用了scan方法,称之为Thread1, 然后scan方法内部又启动了独立线程,称之未Thread1-1,Thread1-2,等等。然后scan方法执行结束之后,Thread1结束,为了要让scan方法循环执行,再次启动另外一个Thread。此时Thread1已经结束,而Thread1-1,1-2是依赖于它的,所以Thread1-1,1-2就报错了:The destination thread no longer exists.

解决办法,修改写法:

cs 复制代码
new Thread(new ThreadStart(scan)).Start();

private void scan()
{   
    while(true)
    {
        //...
        addForm(name);  //该方法内部会另外启动Thread         
        Thread.Sleep(3000);    
        scan();
    }
}

就本例而言,destination thread no longer exists的问题是解决了。

相关推荐
专注仿真2 分钟前
决策树的算法
开发语言·高性能算法
Evand J3 分钟前
【电机滤波例程2】负载转矩增广扩展卡尔曼滤波(EKF)原理与MATLAB例程:五维PMSM状态与负载阶跃估计。订阅专栏后可查看完整代码
开发语言·matlab·电机·ekf·卡尔曼滤波
清水白石00811 分钟前
Python 对象模型深度解析:从“一切皆对象”到 id、type、isinstance 底层机制与小整数缓存原理
开发语言·python·缓存
燕落南枝16 分钟前
c语言 洛谷P1765手机题解
c语言·开发语言
Rosanci18 分钟前
Codex 下载与本地部署实战:从安装到运行全流程指南
开发语言·前端·算法·chatgpt·codex
zhangzeyuaaa22 分钟前
深入 Ruby:Block、Proc、Lambda 核心区别与最佳实践
开发语言·前端·ruby
蜗牛互联网25 分钟前
Java 17调用Embeddings API:余弦相似度与FAQ拒答阈值
java·开发语言·人工智能
郝学胜-神的一滴29 分钟前
AI 编程智能体 05:拆解智能体分级体系、类型与全行业落地场景
开发语言·人工智能·python·程序人生·pycharm
朝朝辞暮i30 分钟前
C++ 第 38 课:线程、SingleThreadedExecutor、MultiThreadedExecutor、Callback Group
开发语言·c++·算法·ros2
外收内放1 小时前
Python基础语法练习题(43-44)
开发语言·python