winform不能循环引用,使用接口传值到界面
1 public partial class frmMain : Form, IFormManager 2 {
4 public frmMain() 5 { 6 InitializeComponent();
8 } 9 10 private void frmMain_Load(object sender, EventArgs e) 11 { 12 Init(); 13 } 14 private void Init() 15 { 16 SocketServer socketServer = new SocketServer(this);
18 } 19 /// <summary> 20 /// 数据写入日志 21 /// </summary> 22 /// <param name="str">数据</param> 23 public void LogOutPut(string str) 24 { 25 this.logTextBox.AppendText(DateTime.Now.ToString("yyy-MM-dd HH:mm:ss") + ":" + str+"\r\n");
27 } 28 }
public class ServerLog { private static IFormManager form; public ServerLog(IFormManager _form) { form = _form; } /// <summary> /// 传值到日志 /// </summary> /// <param name="_passValue"></param> public static void PassValueToLog(string _passValue) { if (_passValue != string.Empty) form.LogOutPut(_passValue); } }
public class SocketServer { ServerLog serverLog; public SocketServer(IFormManager _form) { serverLog = new ServerLog(_form); } }
public interface IFormManager { void LogOutPut(string str); }
在frmMain中,界面需要调用LogOutPut方法,客户端收到服务端发送的也需要调用,不能循环引用,所以使用接口来传值。
在客户端收到服务端发送的数据时,使用ServerLog.PassValueToLog(“收到的数据:”+str)。