app开发者平台在数字化时代的重要性与发展趋势解析
631
2022-12-02
委托委托,谁委托谁?
真绕啊。
话说,我有个窗体程序,运行着一个线程,线程里各种操作。操作过程中,各种提示、 相关信息需要记录到日志,同时也要输出到窗体上,好让人一目了然。
这部分的信息处理工作,我放在一个专门的类里完成。姑且叫做日志类吧。这个日志类的正职,是将信息记录到日志文件。现在,还要输出到窗体,怎么办呢?如果直接在这个类里操作窗体对象,就破坏了这个类的封闭,又增加了耦合。如果是对象注入吧,可能也是个办法,但我总觉得不是很好。今天输出到窗体,你新增一个对象;明天要记录到数据库呢,是不是又要增加个啥?
用委托啊。
上代码:
//线程中调用日志类Logger.Instance.Info($@"第 {iCycle} 轮开始 ……");
//窗体public partial class Form1 : Form{ ShowInfo si; public Form1() { InitializeComponent(); si = new ShowInfo((Form)this,rtb1, 20);//rtb1是一个富文本控件 Logger.Instance.ShowMsg += si.ShowText;//注册委托 }}//窗体输出信息类public class ShowInfo{ Form form; RichTextBox _rtb;//富文本控件,用于在窗体上展示信息 int _rowsLimit; public ShowInfo(Form form,RichTextBox rtb,int rowsLimit = 20) { this.form = form; this._rtb = rtb; this._rtb.BackColor = System.Drawing.SystemColors.ControlText;//背景色为黑色 this._rtb.ForeColor = System.Drawing.Color.Lime;//前景色即文字颜色为蓝绿色 this._rowsLimit = rowsLimit; } public void ShowText(string mess) {//本方法支持多线程 if (_rtb.InvokeRequired) {// 当一个控件的InvokeRequired属性值为真时,说明有一个创建它以外的线程想访问它 Action
运行结果
日志文件:
窗体:
上面这个委托,现在说起来,思路非常清晰,看上去应该是很自然就能想到的,但当时却想了好一阵子才理清头绪。现在对委托的理解又深了一些。
版权声明:本文内容由网络用户投稿,版权归原作者所有,本站不拥有其著作权,亦不承担相应法律责任。如果您发现本站中有涉嫌抄袭或描述失实的内容,请联系我们jiasou666@gmail.com 处理,核实后本网站将在24小时内删除侵权内容。
发表评论
暂时没有评论,来抢沙发吧~