赞
踩
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等。
Copyright © 2003-2013 www.wpsshop.cn 版权所有,并保留所有权利。