C# WinForm 不抱错,自动退出的情况

Posted

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C# WinForm 不抱错,自动退出的情况相关的知识,希望对你有一定的参考价值。

这种现象出现的时间不详! 有时候是10分钟,有时候是2小时。系统日志中也没有错误的信息。在程序的入口中也加入了AppDomain.CurrentDomain.UnhandledException异常的捕捉,但是也没有任何的异常信息。程序中主要就是两个线程对一个列表中的对象进行读写操作。请问高人这个如何解决啊!

这种有多半是由于线程冲突造成的。多半涉及到你线程中操作的对象的“释放”没处理好。
(你可以打开此程序,然后到“任务管理器”中查看此程序的“线程数、IO读取写入、“GDI对象”、“内存占用”等信息,是否正常。记录下数据,然后程序开几分钟后,再看看。)追问

我在公司的电脑上运行很正常!跑了一天了都没有问题,就是到客户那里就会有问题。内存:30M,线程数20,GDI:70。如果说线程冲突的话,我在对象访问和修改的地方都已经添加了锁了。应该不会有冲突啊。之前看到一个帖子说,是因为两个线程访问同一个对象,他们之间访问的时间间隔相差很小的时候,可能会出现此情况。不知道这样分析是否有道理?

追答

有一定的道理。 多纯种中使用共享对象的时候,lock一下,比较安全。

参考技术A 是不是跨线程操作导致的,并且你这两个线程是自己开启的还是包含了主线程(UI)。如果可以程序片段发上来看看,并且可以的话定义一个全局的异常处理,看看是不是跨线程操作导致。追问

这两个线程是在主线程中new的,而且在线程中也用到了代理,但是我在公司找了台PC测试了一整天都没有问题,为什么放到客户那里就会不定时的自动退出?有时候只要10分钟就退出了。
系统日志,和我自己添加的全局异常捕捉都没有错误。郁闷呢

追答

这和机器的环境有关吧,包括系统资源。我想问问是不是每次到了十分钟就会退出?关键是代码没有看到我不好给予直接的回答呀,并且你可以在其他的机子上试试看看有没有出现什么异常情况。并且你把问题描述的清楚点。包括你开辟线程的操作是为了什么。

参考技术B 我最近是在做WinForm项目,也有遇到这个问题,现象和你的一样,不过现在解决了,但是还是不知道是什么原因影响,我觉得是有些错误没有捕捉到引起的,你试下都加trycatch() 参考技术C 我只这样解决的。之前是框架是4.5 的框架,后来因为需要降级为2.0。。降级就不抱错了,直接退出了,好奇怪啊,难道2.0 就没这功能了吗。。
后来我就改回4.5, 然后把错误解决了,再调回2.0 一切正常。哇哈哈哈。
参考技术D 有可能是使用内存过多 VS调试程序会自动关掉它

C# winform 退出时报错.(未将对象引用到实例)

public MainForm()

InitializeComponent();
this.Icon = new System.Drawing.Icon(@"指南针.ico");

skinEngine1.SkinFile = Application.StartupPath + @"\pifu\MSN.ssk";
/// <summary>
/// 清理所有正在使用的资源。
/// </summary>
protected override void Dispose(bool disposing)

if (disposing)

if (components != null)

components.Dispose();


base.Dispose(disposing);//这行出的错


/// <summary>
/// 应用程序的主入口点。
/// </summary>
[STAThread]
static void Main()

Application.Run(new MainForm());


skinEngine1 是一个第三方控件.我如果不加这句话就不会报错.都是在退出时报错.

参考技术A 将skinEngine1.SkinFile这行移到formload里去看看,或者在窗体关闭的时候,禁用掉skinEngine1(应该有一个active之类的属性吧)追问

private void MainForm_Load(object sender, EventArgs e)

skinEngine1.SkinFile = Application.StartupPath + @"\pifu\MSN.ssk";


//-----------------退出系统-----------------------
private void menuItem11_Click(object sender, System.EventArgs e)

skinEngine1.Active = false;
this.Close();

都加上了,还是不好使啊

参考技术B Application.Exit(); 退出系统用这个本回答被提问者采纳

以上是关于C# WinForm 不抱错,自动退出的情况的主要内容,如果未能解决你的问题,请参考以下文章

c# OpenFileDialog 退出

微信小程序自动退出

winform闪退无错误日志

C# winform 适应屏幕分辨率切换问题

C# winform 点击一个按钮退出窗体 并关闭相应的进程

C# winform 如何取得网站cookie,从而实现自动登录。