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的问题是解决了。

相关推荐
JienDa13 小时前
JienDa聊PHP:基于协同架构的PHP主流框架优势整合与劣势补救策略
开发语言·架构·php
i***395813 小时前
JAVA系统中Spring Boot 应用程序的配置文件:application.yml
java·开发语言·spring boot
时光追逐者13 小时前
C# 中 ?、??、??=、?: 、?. 、?[] 各种问号的用法和说明
开发语言·c#·.net·.net core
量化Mike13 小时前
【python报错】解决卸载Python时报错问题:No Python installation was detected
开发语言·python
q***017713 小时前
PHP进阶-在Ubuntu上搭建LAMP环境教程
开发语言·ubuntu·php
q***017713 小时前
Java进阶学习之路
java·开发语言·学习
Zx6236513 小时前
13.泛型编程 STL技术
java·开发语言·c++
2501_9417987313 小时前
Python高性能网络爬虫实战:异步IO与多线程结合代码解析
开发语言·python
亮子AI13 小时前
【Javascript】jsondiffpatch检测到子节点改变了,父节点会标记为改变吗?
开发语言·前端·javascript
caron413 小时前
C++ 推箱子游戏
开发语言·c++·游戏