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上的更多相关文章

  1. C# 读取word2003 并且显示在界面上的方法

    1.新建一个windows窗体程序 2. 引入包WinWordControl.dll 3.添加引用 4.引入组件WinWordControl组件 5.主界面上加入按钮 ,opendialog, win ...

  2. android从资源文件中读取文件流显示

    在android中,假如有的文本文件,比如TXT放在raw下,要直接读取出来,放到屏幕中显示,可以这样:代码区: private void doRaw(){ InputStream is = this ...

  3. c# 获取指定目录下的所有文件并显示在网页上

    参考文献: FileInfo 的使用  https://msdn.microsoft.com/zh-cn/library/system.io.fileinfo_methods(v=vs.110).as ...

  4. 用JSP从数据库中读取图片并显示在网页上

    <1>先在mysql下建立如下的table. 并insert图像. mysql.sql文件如下: CREATE TABLE photo ( photo_no int(6) unsigned ...

  5. 接收键盘输入的字符串,用FileWirter类将字符串写入文件,用FileReader类读出文件内容显示在屏幕上

    public class SY63 { public static void main(String[] args) throws Exception { System.out.print(" ...

  6. Django将.csv文件(excel文件)显示到网页上

    今天,我成功将项目要导入的测试数据导入并呈现了,虽然还不是很完美,但我之后仍会继续改进. 1.首先在主页面上加一个超链接按钮: 其它的不需要管,其它是我的另一个项目,没什么大用的 2.之后配置URL: ...

  7. Unity3D移动平台动态读取外部文件全解析

    前言: 一直有个想法,就是把工作中遇到的坑通过自己的深挖,总结成一套相同问题的解决方案供各位同行拍砖探讨.眼瞅着2015年第一个工作日就要来到了,小匹夫也休息的差不多了,寻思着也该写点东西活动活动大脑 ...

  8. java servlet上传文件并把文件内容显示在网页中

    servlet3.0(JDK1.6)自带的API即可实现本地文件的上传,Servlet3.0新增了Part接口,HttpServletRequest的getPart()方法取得Part实现对象.下面我 ...

  9. HTML5 文件域+FileReader 分段读取文件并上传到服务器(六)

    说明:使用Ajax方式上传,文件不能过大,最好小于三四百兆,因为过多的连续Ajax请求会使后台崩溃,获取InputStream中数据会为空,尤其在Google浏览器测试过程中. 1.简单分段读取文件为 ...

随机推荐

  1. 系统启动 之 Linux系统启动概述(1)

    随着智能终端功能的越来越庞大,与之,硬件配置越来越高,开机时间却越来越长.人们在享受强大功能的同时,对冗长的智能终端的开机时间却越来越缺乏耐心. 为了"取悦"用户,需要提供较好的用 ...

  2. hibernate 使用 hibernate tool 生成配置文件和实体类

    安装Hibernate插件 下载所需的Hibernatetools  http://www.hibernate.org/6.html 将下载得到的文件解压得到的features和plugins文件夹, ...

  3. android在myeclipse上创建的项目各种报错

    这几天被android弄得头疼死了.差不多把电脑弄了个遍. 先是离线安装ADT,下载ADT,然后配置,但是因为ADT与MyEclipse冲突.所以直接不要再myeclipse下弄Android的环境了 ...

  4. 手把手教做单点登录(SSO)系列之一:概述与示例

    本系列将由浅入深的结合示例.源码以及演示视频,手把手的带大家深入最新的单点登录SSO方案选型与架构开发实战.文末附5个满足不同单点登录场景的gif动画演示(如果看不清请在图片上右键用新窗口打开),本系 ...

  5. hdu3829最大独立集

    The zoo have N cats and M dogs, today there are P children visiting the zoo, each child has a like-a ...

  6. Tp5.0 PHPMailer邮件发送

    今天突然想起来邮件发送,就看了一下PHPmailer,其实这个用起来很简单,都是封装好的 https://github.com/PHPMailer/PHPMailer,直接下载下来之后,把他放入TP5 ...

  7. 2017最新最稳定的彩票源码PHP+mysql 新增彩种+全新界面

    网站后台管理系统:新闻资讯系统 用户管理系统用户登录日志彩种规则说明玩法时间设置彩票期号管理足球对阵管理彩票方案撤单彩票出票管理开奖号码管理彩票方案查询彩票中奖查询 彩票追号查询服务支持中心财务中心管 ...

  8. Welcome to my Blog

    Only English? Oh my god!!! why open live write can't write by Chinese?

  9. 云计算之路-阿里云上:攻击又来了,4个IP分别遭遇超过30G的流量攻击

    继5月13日下午被攻击之后,今天下午,攻击又肆无忌惮地来了,14:35.14:39.14:40.14:41 ,依次有4个IP遭遇超过30G的流量攻击,被阿里云“云盾”关进“黑洞”,造成被攻击IP上的站 ...

  10. sendemail 发送成功Email was sent successfully!邮箱却收不到邮件

    在测试sendemail的时候,发现好多次明明提示已经发送成功了,但是邮箱却一直收不到邮件. 查询了好多资料,主要原因有两个 1.如果Linux是sentos的话,主要是防火墙iptables和sel ...