C#线程的用法有几个不同的地方:
1、怎么启动线程?
2、是不是需要传入参数?
3、是不是要调用到UI中的控件,并对其进行更新?
关于启动线程,这里一个示例是在form中启动:
定义一个private:static Form1^ instance;变量
并在构造函数中赋值为this:
Form1(void)
{
instance = this;
InitializeComponent();
}
假如有参数传入线程,使用下面这样的方法:
private: System::Void BTN_Config_Click(System::Object^ sender, System::EventArgs^ e)
{
。。。
Thread^ formThread = gcnew Thread(gcnew System::Threading::ParameterizedThreadStart(instance, &Form1::myUARTThread));
formThread->Start(20);
。。。
}
如果传入的参数需要更新到窗体的控件中,则需要使用delegate的方法,如下:
delegate void myUARTThreadDelegate(Object^ obj);
private: void myUARTThread(Object^ obj)
{
ISynchronizeInvoke^ i = this;
if (i->InvokeRequired)
{
myUARTThreadDelegate^ tempDelegate = gcnew myUARTThreadDelegate(this, &Form1::myUARTThread);
cli::array<System::Object^>^ args = gcnew cli::array<System::Object^>(1);
args[0] = obj;
i->BeginInvoke(tempDelegate, args);
return;
}
this->textBox_Receiver->Text = obj->ToString();
}
最后需要注意的是myUARTThreadDelegate(Object^ obj);参数用的时Object^,不能直接用count等。