求救.winform调试完全正常,运行exe数据量一大就死解决思路
发布时间:2011-06-21 11:33:36 文章来源:www.iduyao.cn 采编人员:星星草
求救...winform调试完全正常,运行exe数据量一大就死
如题,软件是一个读取文件的,里面有大量数据,文件数目量也比较大.将文件读取到datatable,然后绑定gridview进行显示.使用的backgroundWorker.
调试的时候怎么都正常.没有意外.
问题就在按ctrl+f5或者直接运行bin下面exe的时候,在文件数少的情况下正常,但是当读取大量文件时,到最后完成的时候,整个软件就死掉了(应该是在完成backgroundWorker_DoWork后几秒,因为读取文件是执行完了的,然后会死在调用完成函数backgroundWorker_RunWorkerCompleted的途中,注意是途中...但是这个函数并不执行什么复杂的,只是改变一下label,如果不使用RunWorkerCompleted函数,则会在完成后几秒软件莫名死掉)...
代码没有什么特别的
//按钮调用
private void Load_Button_Click(object sender, EventArgs e)
{
if (Directory.Exists(textBox_FilePath.Text) && (textBox_FilePath.Text != null))
{
backgroundWorker_load.RunWorkerAsync();
}
else
{
MessageBox.Show("Wrong folder path?");
}
}
//DoWork函数
private void backgroundWorker_load_DoWork(object sender, DoWorkEventArgs e)
{
buttonenable(false);
load185.initdt();
string[] files = new string[256];
int count = 0;
PublicLoadFunc.GetFileList(textBox_FilePath.Text.Trim(), files, ref count);
if (files[0] == null)
{
MessageBox.Show("No file found.");
return;
}
for (int i = 0; i < count; i++)
{
backgroundWorker_load.ReportProgress((i * 100 + 50) / count,i.ToString()+"/"+count.ToString()+ " Loading " + files[i].ToString().Trim() + ".");
NewDelegate startLoad = new NewDelegate (load185.LoadOneFile);
startLoad.Invoke(files[i].ToString().Trim(), i);
//load185.LoadOneFile(files[i].ToString().Trim(), i);//这里用不用委托都一样
backgroundWorker_load.ReportProgress(((i + 1) * 100) / count, (i+1).ToString() + "/" + count.ToString() + " Loading " + files[i].ToString().Trim() + " completed.");
Application.DoEvents();
}
}
完全想不明白了,也不知道怎么调试,弄了一天了哎,伤感...求高手指教
------解决方案--------------------
(文件数目量也比较大)可能是太占内存了啊
要是几十万。。。。那要占多大内存啊
------解决方案--------------------
在WinForm中经常遇到一些费时的操作界面,比如统计某个磁盘分区的文件夹或者文件数目,如果分区很大或者文件过多的话,处理不好就会造成“假死”的情况,或者报“线程间操作无效”的异常,为了解决这个问题,可以使用委托来处理,在.net2.0中还可以用BackgroundWorker类。BackgroundWorker类是.net 2.0里新增加的一个类,对于需要长时间操作而不需要用户长时间等待的情况可以使用这个类。 注意确保在 DoWork 事件处理程序中不操作任何用户界面对象。而应该通过 ProgressChanged 和 RunWorkerCompleted 事件与用户界面进行通信。
------解决方案--------------------
今天正好尝试打开自己的程序写的运行日志
500多M,打不开!!!
你这问题咱没见过,只能帮顶
------解决方案--------------------
首先从代码看,似乎lz对于BackgroundWorker理解的不太完全正确,DoWork里面还在访问界面的控件是根本不对的。
至于假死,那原因可多了去了,不调试是没办法的。至于调试,WinDbg + SOS最实际了,可惜BW多线程还搞不清楚的估计没那么容易上手。
付费找个高手去你那里帮你看看好了。反正基本就是你代码的问题。人家Visual Studio编译一大堆文件都你这么假死的。
------解决方案--------------------
肯定是代码问题 不是逻辑问题 就是组件的使用问题! 根据LZ贴出来的代码 应该是BackgroundWorker的使用问题 就如2楼说的一样:
"注意确保在 DoWork 事件处理程序中不操作任何用户界面对象。而应该通过 ProgressChanged 和 RunWorkerCompleted 事件与用户界面进行通信" 实在不行 你就用new Thread + delgate试试!就算操作20个G我也遇到过问题!
------解决方案--------------------
肯定是代码的问题 一是逻辑问题 二是使用组件的方法问题 根据LZ贴出来的代码看来 就是BackgroundWorker的使用问题了 就如二楼所说的:
"注意确保在 DoWork 事件处理程序中不操作任何用户界面对象。而应该通过 ProgressChanged 和 RunWorkerCompleted 事件与用户界面进行通信" 注意访问用户界面的方式!
友情提示:
信息收集于互联网,如果您发现错误或造成侵权,请及时通知本站更正或删除,具体联系方式见页面底部联系我们,谢谢。
其他相似内容:
-
C#读取文本并入库
文本格式固定如下:
**********************:
<中文作者一>=赵逢玲
<中文作者二>=杜秀华
<中文作者三>=王翠东
<中...
-
C#操作Word文档(Office 2007)
首先引入类库,Microsoft.Office.Interop.Word,然后进行编程。代码如下:
using ...
-
请问,ReadLine方法读取文件
一个txt文件,有两行
aaaa
bbbb
代码:
string s1 = @"D:iosamplepp.txt";
using (StreamReader sr = new...
-
验证控件
在gridview页脚行添加了验证控件,可是点击编辑更新时触发了验证事件,无法更新,怎么办?
------解决方案-------------------...
-
在BITMAP上用GDI+画图,如何使画出的图像尽可能清晰?
我在一张bitmap上用GDI+绘制了简单的多边形,并用PictureBox显示。
我发现,如果我...
-
???如何利用webbrower获取ifream元素????
如何利用webbrower获取ifream元素.我在GOOGLE,BAIDU一整天依然无法找到解决方法!!希望各...
-
如何解决“已有打开的与此命令相关联的DataReader,必须首先将它关闭。”错误?
小弟写了一个DBHelper类来控制数据库访问,但是在实际...
-
在做asp.net项目时,在做数据库更新时出现',' 附近有语法错误。(数据库是用sql2000的)
数据库更新语句:
public void Update()
...
-
为什么我这段代码不会发出声音呢?
C# code
using System;
using System.Collections.Generic;
using System.ComponentModel;
usi...
-
ClickOnce 不支持请求执行级别requireAdministrator
写了一个应用程序,使用ServiceController控制 windows服务的的启动和停止。
...