» 您尚未登录:请 登录 | 注册 | 标签 | 帮助 | 小黑屋 |


发新话题
打印

C#编程遇到一个问题,求解决思路。。。。

posted by wap, platform: Android
在主窗口某个按钮里动态生成了1个对话框,用于显示数据曲线

问题来了,只要生成了对话框,大约3到5分钟后必弹出一个错误信息“请确保在试用某个资源之前尚未将其释放 ”,但是跟普通的错误信息不一样,没有提示是具体出错位置。。。

开始我感觉是对话框声明的位置不对,按钮函数返回了,对话框对象就被释放了,但是放到按钮函数外头也不行,问题依旧。。。

实在搞不懂为什么,请大神赐教解决思路。。。。


TOP

引用:
原帖由 xpressure 于 2016-9-17 19:52 发表
单步调试啊,按你描述,最有可能是引用的资源被释放了
关键是不知道出错的位置啊。。。

出错的时间也不定,时长时段,但基本都是5分钟左右。。。



TOP

比如我在主窗口的某个函数里,用这个方法生成了窗口

private void NewDlgBtn_Click(object sender, RoutedEventArgs e)
{
    DisplayDlg dlg = new DisplayDlg ();
    .....
    dlg .Show();
    return;
}

当NewDlgBtn_Click函数返回后,dlg还会存在多久??会不会被自动释放??


TOP

引用:
原帖由 HLucifer 于 2016-9-17 20:00 发表
posted by wap, platform: iPhone
把显示曲线图的代码注释点,只留生成窗体弹窗的代码,看看还有没有这种情况。如果没有就是曲线图的问题,再逐步排查吧,最好贴代码
只留一个定时器,一个cnt,每1秒cnt++,写到textbox里,看啥时候死。。。

其他代码统统都删干净了。

TOP

引用:
原帖由 jzhl 于 2016-9-17 20:11 发表
posted by wap, platform: iPhone
你在主窗体声明一个dlg对象,然后再在click时,主窗体.dlg = new DisplayDlg ();就OK了
我试过在主窗体声明dlg

然后再click里再声明一个dlg1
(正常来说这里dlg1有好多初始化操作,设置横纵坐标范围,图线颜色等,但加不加效果一样,都死。。)
然后
dlg=dlg1

dlg.show()

道理应该一样吧,,,这样也不行。。。

而且有时候需要新建多个窗口,必须要有多个DisplayDlg对象。。。

[ 本帖最后由 shixn 于 2016-9-17 20:28 编辑 ]

TOP

引用:
原帖由 maybach 于 2016-9-17 20:19 发表
posted by wap, platform: 红米Note3
一般是你的窗体owner diposed了
有没有什么办法追踪啊??

我肯定没有主动调用过close,diposed之类的

TOP

引用:
原帖由 xpressure 于 2016-9-17 20:21 发表

没有手工释放的话,应该不会是这里的问题
肯定没有手工释放

那就是说我在click里声明的DisplayDlg 对象会一直存在?直到手动关闭窗口为止?

TOP

引用:
原帖由 xpressure 于 2016-9-17 20:27 发表


系统会自行处理,看上去就跟一直存在一样
我开始就是怀疑会不会被系统自己处理掉了。。。

但是把DisplayDlg对象放在click外面也没用。。。

疯了

TOP

引用:
原帖由 klites 于 2016-9-17 20:41 发表
感觉就是多线程没处理好,.net版本是多少?
4.0

VS2010

wpf工程

没用到多线程啊。。。因为压根不会。。。

TOP

引用:
原帖由 xpressure 于 2016-9-17 20:49 发表
发生错误的时候,去看看windows日志
代码在单位的机器里,明天去看看,多谢指教!

TOP

引用:
原帖由 jzhl 于 2016-9-17 21:19 发表
posted by wap, platform: iPhone
这个DisplayDlg类是你自己写的吗?会不会有些资源调用了没释放?
这个就是新建窗口,起个名字(DisplayDlg),然后拖了个几个控件放进去。。。

弄几个变量,主窗口里的数据传递进来。

然后搞了个定时器,1秒1次,把变量里的数显示出来。

现在为了找问题,能删的都删了,只有一个定时器函数,1秒++一个cnt,显示出来,其他没了。。。

百度了下“C# 资源”,感觉跟我没啥关系啊。。。

TOP

引用:
原帖由 klites 于 2016-9-17 21:30 发表
wpf里UI是占主线程的,像后台计时并通知前端textbox这类的操作都要用多线程解决,不然前端UI会卡死
可是我在主窗口里也有类似的操作,后台定时读串口,显示到textbox,运行1天1夜也没事。。。

只要一show新窗口,5分钟,必死无疑。。。

TOP

引用:
原帖由 xpressure 于 2016-9-17 22:49 发表


我好像知道原因了,你明天代码发我下
好!!!

TOP

发新话题
     
官方公众号及微博