编译小程序时,必须单独运行软件,然后编译才能生成。
单独运行后,第二次重新运行出现CLR20r3错误,发现在互联网上查找资料没有结果,最后软件退出后,任务管理器中还出现了退出的该程序线程。
网络捕获异常也没有发现问题,最后根据代码内容判断屏蔽了线程部分的内容,这样就正常了。 但是,自己不知道如何排除问题。 因为线程是局部变量,所以也不能关闭。 我在查线程资料的时候发现了朋友的博客,顺利解决了我的问题。 内容摘录如下* (新浪博客:与阳光同行) )。
在最近编写的程序中,当我关闭主程序时,我发现进程中总是有. exe文件。
研究结果表明,如果程序退出时不关闭线程,线程将一直存在。 但是,大多数启动的线程都是局部变量,不能一一关闭。 不能这样做,因为调用Thread.CurrentThread.Abort ()方法关闭主线程会导致ThreadAbortException异常。
后来找到了解决办法:
Thread.IsBackground将线程设置为后台线程。
初始化主线程时,thread.current thread.is background=true;
因此,主线程是后台线程,关闭主程序将关闭主线程,并关闭所有线程。
但是,这会强制关闭所有正在运行的线程,并在关闭时保存线程行为的结果。
——————————————
MSDN对前台线程和后台线程的解释:
是托管线程、后台线程还是前台线程? 后台线程不会激活主机执行环境。 除此之外,后台线程与前台线程相同。 如果所有后台线程的管理进程. exe文件都是管理组合件,则系统将停止并关闭所有后台线程。 通过设置Thread.IsBackground属性,可以将线程指定为后台线程或前台线程。 例如,如果将Thread.IsBackground设置为true,则可以将线程指定为背景线程。 同样,可以通过将IsBackground设置为false将线程指定为前台线程。 从非托管代码进入托管执行环境的所有线程都将标记为后台线程。 通过创建并启动新的Thread对象生成的所有线程都是前台线程。 如果要创建前台线程来监视特定活动(如套接字连接),则必须将Thread.IsBackground设置为true,以便进程可以终止。
——————————————
C#如何退出程序:
1.APP.exit (; //似乎只在主线程上工作,如果有线程或有阻止方法,很容易无法正常工作
2.system.environment.exit(0; //无论是主线程还是其他线程,只要执行该语句,就可以干净地结束程序
3.this.Close (;
4.Application.ExitThread (;
20200919抄别人的不行,还是要自己总结才能提高
//图中的错误明显是索引超限问题,问题已经解决,是为了再现而造成的。
我不太清楚CLR20r3错误的编号是什么意思,但我清楚地知道这个错误只是一个符号。 具体引起错误的原因有很多,但主要是程序逻辑错误、冗馀错误的问题。 语法错误容易处理,逻辑错误的故障排除很难。 简单的应对方法是进行异常捕捉,但我认为更好的是逻辑、代码的完善,但这很难。 写了tcp程序,提示了fileio错误,但没有进行文件操作。 找了几天也找不到,空了的话请试着重写代码……。