1)线程不带参数
Thread objThread = new Thread(new ThreadStart(ExecuteSendConnectDevice));
objThread.IsBackground = true;
objThread.Start();
private void ExecuteSendConnectDevice() {
Console.WriteLine("this is no param ExecuteSendConnectDevice");
}
2)使用lambada
new Thread(new ThreadStart(() =>
{
while (sendFlag)
{
serialSendMsg(connectBytes);
Console.WriteLine(System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:ffff") + "发送:" + ByteCalculator.ByteToHexStr(connectBytes));
Thread.Sleep(1000);
}
})).Start();
3)线程带参数 同时 在线程中展示textbox
ParameterizedThreadStart ParStart = new ParameterizedThreadStart(ParamExecuteSendConnectDevice);
Thread myThread = new Thread(ParStart);
myThread.Start(connectBytes);
public void ParamExecuteSendConnectDevice( Object obj) {
while (sendFlag) {
byte[] connectBytes = (byte[])obj;
serialSendMsg(connectBytes);
txt_logSetText(ByteCalculator.ByteToHexStr(connectBytes));
Console.WriteLine(System.DateTime.Now.ToString("yyyy-MM-dd HH:mm:ss:ffff") + "发送:" + ByteCalculator.ByteToHexStr(connectBytes));
Thread.Sleep(1000);
}
}
//注意这里要使用委托,而且把委托放到一个正常的函数中
delegate void SetTextCallback(string text);
private void txt_logSetText(string str)
{
if (this.txt_log.InvokeRequired)
{
SetTextCallback d = new SetTextCallback(txt_logSetText);
this.Invoke(d, new object[] { str });
}
else
{
scrollTextBox(txt_log, str);
}
}