C# WinForm读取txt文件 并且显示的问题 、 50

用winform读取txt文件、能够正常的显示在界面上、当txt文件比较大时、界面就会卡住、要等一会才会显示出数据、一下全部显示、我希望能够读取一行就显示一行、显示我单开... 用winform读取txt文件、能够正常的显示在界面上、当txt文件比较大时、界面就会卡住、要等一会才会显示出数据、一下全部显示、我希望能够读取一行就显示一行、显示我单开了一线程、也设置了睡眠时间、但还是没效果、也还要等半天才会全部显示出来、我对委托和线程都不是很熟悉、求高手帮帮忙。 展开
 我来答
tattackor
推荐于2016-06-04 · TA获得超过3.5万个赞
知道大有可为答主
回答量:5083
采纳率:94%
帮助的人:882万
展开全部
C#读写txt文件的两种方法:

1.添加命名空间
  System.IO;
  System.Text;

2.文件的读取
  (1).使用FileStream类进行文件的读取,并将它转换成char数组,然后输出。
byte[] byData = new byte[100];
char[] charData = new char[1000];
public void Read()
{
try
{
FileStream file = new FileStream("E:\\test.txt", FileMode.Open);
file.Seek(0, SeekOrigin.Begin);
file.Read(byData, 0, 100); //byData传进来的字节数组,用以接受FileStream对象中的数据,第2个参数是字节数组中开始写入数据的位置,它通常是0,表示从数组的开端文件中向数组写数据,最后一个参数规定从文件读多少字符.
Decoder d = Encoding.Default.GetDecoder();
d.GetChars(byData, 0, byData.Length, charData, 0);
Console.WriteLine(charData);
file.Close();
}
catch (IOException e)
{
Console.WriteLine(e.ToString());
}
}

  (2).使用StreamReader读取文件,然后一行一行的输出。
public void Read(string path)
{
StreamReader sr = new StreamReader(path,Encoding.Default);
String line;
while ((line = sr.ReadLine()) != null)
{
Console.WriteLine(line.ToString());
}
}

3.文件的写入
  (1).使用FileStream类创建文件,然后将数据写入到文件里。
public void Write()
{
FileStream fs = new FileStream("E:\\ak.txt", FileMode.Create);
//获得字节数组
byte[] data = System.Text.Encoding.Default.GetBytes("Hello World!");
//开始写入
fs.Write(data, 0, data.Length);
//清空缓冲区、关闭流
fs.Flush();
fs.Close();
}

  (2).使用FileStream类创建文件,使用StreamWriter类,将数据写入到文件。
public void Write(string path)
{
FileStream fs = new FileStream(path, FileMode.Create);
StreamWriter sw = new StreamWriter(fs);
//开始写入
sw.Write("Hello World!!!!");
//清空缓冲区
sw.Flush();
//关闭流
sw.Close();
fs.Close();
}
丶傀儡师苏摩
2013-12-06 · 超过24用户采纳过TA的回答
知道答主
回答量:112
采纳率:0%
帮助的人:51.1万
展开全部
一般读取文件中的内容送到界面显示,界面控件所在线程肯定就是你的主线程。如果文件比较大,读取时需要一点时间也是可以理解的,像很多文本编辑器在打开很大的文件时多少还是有点卡的。这个就看你能不能接受了。

既然你说到了委托和线程,那我猜想你是想另外开一个线程,用来读取文件,而主线程就只负责将内容在界面控件中显示。但是没必要搞这么复杂吧?

你可以把你这部分代码贴出来大家帮你看看。

最后吐槽一下,你键盘除了“、”,别的标点符号按键都坏了么?
追问
不好意思、这两天有点事、
就是像你说的那样、再开一个线程、用来更新UI、读取的文件不会太大的、是因为现在要读取完所有的才会显示出来、所有一开始会有点死了的感觉、没反应、所以我想读取一行显示一行、这样看起来要好很多、而且不光是显示还有别的要做、比如把读取到的这一行转码再发给下位机、我收到命令再去读取一行、再发再收 ....
本回答被网友采纳
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
jqkalytrue
2013-12-06 · TA获得超过835个赞
知道小有建树答主
回答量:1509
采纳率:57%
帮助的人:377万
展开全部
1开读取线程
2循环读取n行
3委托更新1下界面
线程thread 和委托 *.invoke 都有很多例子自己百度吧

再高级点 可以光读取屏幕显示的,等用户操作时候根据操作读取相应内容显示,多余的不用读取 这样就最快了,不过要写算法判断显示内容
追问
我也是想的开一个线程来更新UI、但是新开线程怎么传参啊、
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
百度网友f604a81
2013-12-06 · 超过60用户采纳过TA的回答
知道小有建树答主
回答量:187
采纳率:0%
帮助的人:103万
展开全部
try
{
StreamReader sr = new StreamReader(filepath, Encoding.Default);
String db_name = System.Configuration.ConfigurationSettings.AppSettings["db_name"];
String line;
sb.Append(db_name+"\r\n");
sb.Append(DateTime.Now.ToString() + "\r\n");
int i = 0;
while ((line = sr.ReadLine()) != null)
{
i++;

if (i<=9)
{
sb.Append(line + "\r\n");
textBox1.AppendText(line);
}

}
sb.Append("*" + "\r\n");
sr.Close();
}
catch
{
MessageBox.Show("读取文件失败");
return "";
}
自己再尝试几下
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
阿凡不哭
2013-12-06
知道答主
回答量:1
采纳率:0%
帮助的人:1426
展开全部
建议将txt文件中的内容保存为xml格式,在调用中会明显提速,如果不行,尝试精简调用过程
已赞过 已踩过<
你对这个回答的评价是?
评论 收起
收起 更多回答(4)
推荐律师服务: 若未解决您的问题,请您详细描述您的问题,通过百度律临进行免费专业咨询

为你推荐:

下载百度知道APP,抢鲜体验
使用百度知道APP,立即抢鲜体验。你的手机镜头里或许有别人想知道的答案。
扫描二维码下载
×

类别

我们会通过消息、邮箱等方式尽快将举报结果通知您。

说明

0/200

提交
取消

辅 助

模 式