动态读取文件持续显示在UI上
private void DisplayLogInfo(FileInfo _LastFile)
{
if (_LastFile != null)
{
StreamReader sr = null;
try
{
UpdateUIDelegate uuDelegate = new UpdateUIDelegate(UpdateUI); //定义委托来存放更新UI的方法 if (File.Exists(_LastFile.FullName))
{
using (
FileStream fsFileStream = new FileStream(_LastFile.FullName, FileMode.Open, FileAccess.Read,
FileShare.ReadWrite))//这样打开文件来避免同时访问的冲突
{
if (_logReadPosition == fsFileStream.Length) return; int bufferLength = ;
byte[] buffer = new byte[bufferLength];
if (fsFileStream.Length > bufferLength)
fsFileStream.Position = fsFileStream.Length - bufferLength - ;
else
fsFileStream.Position = ;
fsFileStream.Read(buffer, , bufferLength); //只读取文件的一部分
List<byte> lb = buffer.ToList();
for (int i = ; i < lb.Count; i++) //循环来去除其中的换行符以免显示出来的乱七八糟
{
if (i + < lb.Count && lb[i] == && lb[i + ] == )
{
lb.Remove(lb[i + ]);
lb.Remove(lb[i]);
break;
}
else
{
lb.Remove(lb[i]);
i--;
}
}
if (lb.Count == || (lb.Count > && lb[] == )) { _logReadPosition = fsFileStream.Length; return; }
buffer = lb.ToArray();
MemoryStream ms = new MemoryStream(buffer); sr = new StreamReader(ms);
string line;
LogMessageListBox.Items.Clear();
while ((line = sr.ReadLine()) != null && !line.StartsWith("\0")) //读取的时候发现有不少乱码,去掉其中\0开始的行
{
this.Dispatcher.BeginInvoke(uuDelegate, line); //异步调用来把Line显示到界面上,当文件更新太快时(<100ms)这个方法好像还不太适用
}
_logReadPosition = fsFileStream.Length;
}
}
}
finally
{
if (sr != null)
sr.Close();
}
}
} private void UpdateUI(string line)
{
this.LogMessageListBox.Items.Add(line);
this.tbLogMessage.Text = line.Remove(, line.IndexOf("|") + );
LogMessageListBox.ScrollIntoView(
LogMessageListBox.Items[LogMessageListBox.Items.Count - ]);
}
动态读取文件持续显示在UI上的更多相关文章
- C# 读取word2003 并且显示在界面上的方法
1.新建一个windows窗体程序 2. 引入包WinWordControl.dll 3.添加引用 4.引入组件WinWordControl组件 5.主界面上加入按钮 ,opendialog, win ...
- android从资源文件中读取文件流显示
在android中,假如有的文本文件,比如TXT放在raw下,要直接读取出来,放到屏幕中显示,可以这样:代码区: private void doRaw(){ InputStream is = this ...
- c# 获取指定目录下的所有文件并显示在网页上
参考文献: FileInfo 的使用 https://msdn.microsoft.com/zh-cn/library/system.io.fileinfo_methods(v=vs.110).as ...
- 用JSP从数据库中读取图片并显示在网页上
<1>先在mysql下建立如下的table. 并insert图像. mysql.sql文件如下: CREATE TABLE photo ( photo_no int(6) unsigned ...
- 接收键盘输入的字符串,用FileWirter类将字符串写入文件,用FileReader类读出文件内容显示在屏幕上
public class SY63 { public static void main(String[] args) throws Exception { System.out.print(" ...
- Django将.csv文件(excel文件)显示到网页上
今天,我成功将项目要导入的测试数据导入并呈现了,虽然还不是很完美,但我之后仍会继续改进. 1.首先在主页面上加一个超链接按钮: 其它的不需要管,其它是我的另一个项目,没什么大用的 2.之后配置URL: ...
- Unity3D移动平台动态读取外部文件全解析
前言: 一直有个想法,就是把工作中遇到的坑通过自己的深挖,总结成一套相同问题的解决方案供各位同行拍砖探讨.眼瞅着2015年第一个工作日就要来到了,小匹夫也休息的差不多了,寻思着也该写点东西活动活动大脑 ...
- java servlet上传文件并把文件内容显示在网页中
servlet3.0(JDK1.6)自带的API即可实现本地文件的上传,Servlet3.0新增了Part接口,HttpServletRequest的getPart()方法取得Part实现对象.下面我 ...
- HTML5 文件域+FileReader 分段读取文件并上传到服务器(六)
说明:使用Ajax方式上传,文件不能过大,最好小于三四百兆,因为过多的连续Ajax请求会使后台崩溃,获取InputStream中数据会为空,尤其在Google浏览器测试过程中. 1.简单分段读取文件为 ...
随机推荐
- Eclipse 如何添加Window Builder插件?
http://www.eclipse.org/windowbuilder/download.php 找到对应版本的window builder 如果不知道版本的话,可以在你的Eclipse-help- ...
- spring计划任务
Spring3中加强了注解的使用,其中计划任务也得到了增强,现在创建一个计划任务只需要两步就完成了: 创建一个Java类,添加一个无参无返回值的方法,在方法上用@Scheduled注解修饰一下: 在S ...
- button按钮点击不刷新(前端交流学习:452892873)
<button type="button" value="test" >确认买单</button> 可实现页面点击不刷新效果
- 遇见未知的CSS
1.1 CSS中你可能会疑问的几个问题 1.1.1 在CSS中为什么要有层叠 在CSS中可能会有多个样式表同时影响同一个元素的某个属性,设计这个功能的主要原因有两个,解决模块化和作者.用户.用户代理样 ...
- Ubuntu下如何解压各类文件
tar解包:tar xvf FileName.tar打包:tar cvf FileName.tar DirName(注:tar是打包,不是压缩!)---------------.gz解压1:gunzi ...
- JAVA内存模型5-锁
锁的释放-获取建立的happens before关系 锁是java并发编程中最重要的同步机制.锁除了让临界区互斥执行外,还可以让释放锁的线程向获取同一个锁的线程发送消息.下面是锁释放-获 ...
- Java线程安全性中的对象发布和逸出
发布(Publish)和逸出(Escape)这两个概念倒是第一次听说,不过它在实际当中却十分常见,这和Java并发编程的线程安全性就很大的关系. 什么是发布?简单来说就是提供一个对象的引用给作用域之外 ...
- Cassandra Issue with Tombstone
1. Cassandra is quicker than postgre and have lower change to lose data. Cassandra doesn't have fore ...
- ReentrantLock深入学习
ReentrankLock 分为 非公平锁及公平锁 首先我们看一下它里面有哪些属性: private final Sync sync;Sync 这个类是 ReentrantLock的 一个静态内部类 ...
- 【Netty】ChannelHandler和ChannelPipeline
一.前言 前面学习了Netty的ByteBuf,接着学习ChannelHandler和ChannelPipeline. 二.ChannelHandler和ChannelPipeline 2.1 Cha ...