朋友在写socket的程序,希望将业务逻辑和界面分离。
写了个运用事件、委托的小demo,不当之处还望多多指点。
业务逻辑代码:
class KeyEventArgs : EventArgs
{
private string _msg;
public KeyEventArgs(string msg)
: base()
{
this._msg = msg;
}
public string Msg
{
get
{
return _msg;
}
}
}
class Server
{
public delegate void AfterReceived( object sender, KeyEventArgs e );
public event AfterReceived ReceiveEvent;
public void Run()
{
while (true)
{
var random = new Random();
random.Next(1000);
KeyEventArgs keyEventArgs = new KeyEventArgs("接收到报文:" +random.Next(1000).ToString());
ReceiveEvent(this, keyEventArgs);
Thread.Sleep(2000);
}
}
}
UI部分代码
public partial class Main : Form
{
private Thread backGroundThread;
private Server server = new Server();
public Main()
{
InitializeComponent();
backGroundThread = new Thread(new ThreadStart(server.Run));
backGroundThread.IsBackground = true;
//注册事件处理程序
server.ReceiveEvent += AfterReceived;
}
private void btnBegin_Click(object sender, EventArgs e)
{
backGroundThread.Start();
}
/// <summary>
/// 事件处理
/// </summary>
/// <param name="sender"></param>
/// <param name="e"></param>
private void AfterReceived(object sender, KeyEventArgs e)
{
listBoxResult.Items.Add(e.Msg);
}
}