.net – 是否有TextWriter子类在写入文本时触发事件?
发布时间:2020-12-15 04:53:02 所属栏目:Java 来源:网络整理
导读:我编写了一个接受TextWriter作为参数的方法(通常是Console.Out,但不一定). 当我调用此方法时,会向TextWriter写入一些进度信息. 但是,由于此方法可能会运行很长时间,我想用一些状态信息更新我的UI. 目前,我使用的是StringWriter,但它没有任何事件.所以我第一
我编写了一个接受TextWriter作为参数的方法(通常是Console.Out,但不一定).
当我调用此方法时,会向TextWriter写入一些进度信息. 目前,我使用的是StringWriter,但它没有任何事件.所以我第一次从StringWriter获得结果是在方法完成之后. 现在我正在搜索一个继承自TextWriter并触发TextChanged事件或类似事件的类. 解决方法
如果有人感兴趣,这是一个扩展StringWriter()类的类,在每次调用writer.Flush()之后触发事件.
我还添加了posibillity以在每次写入后自动调用Flush(),因为在我的情况下,第三方组件,写入控制台,没有执行刷新. 样品用法: void DoIt() { var writer = new StringWriterExt(true); // true = AutoFlush writer.Flushed += new StringWriterExt.FlushedEventHandler(writer_Flushed); TextWriter stdout = Console.Out; try { Console.SetOut(writer); CallLongRunningMethodThatDumpsInfoOnConsole(); } finally { Console.SetOut(stdout); } } 现在我可以及时显示一些状态信息,而不需要等待方法完成. void writer_Flushed(object sender,EventArgs args) { UpdateUi(sender.ToString()); } 这是班级: public class StringWriterExt : StringWriter { [EditorBrowsable(EditorBrowsableState.Never)] public delegate void FlushedEventHandler(object sender,EventArgs args); public event FlushedEventHandler Flushed; public virtual bool AutoFlush { get; set; } public StringWriterExt() : base() { } public StringWriterExt(bool autoFlush) : base() { this.AutoFlush = autoFlush; } protected void OnFlush() { var eh = Flushed; if (eh != null) eh(this,EventArgs.Empty); } public override void Flush() { base.Flush(); OnFlush(); } public override void Write(char value) { base.Write(value); if (AutoFlush) Flush(); } public override void Write(string value) { base.Write(value); if (AutoFlush) Flush(); } public override void Write(char[] buffer,int index,int count) { base.Write(buffer,index,count); if (AutoFlush) Flush(); } } (编辑:李大同) 【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容! |