当前位置:   article > 正文

C#thread线程传参数更新UI的文本框

C#thread线程传参数更新UI的文本框

C#线程的用法有几个不同的地方:

1、怎么启动线程?

2、是不是需要传入参数?

3、是不是要调用到UI中的控件,并对其进行更新?

关于启动线程,这里一个示例是在form中启动:

  1. 定义一个private:static Form1^ instance;变量
  2. 并在构造函数中赋值为this
  3. Form1(void)
  4. {
  5. instance = this;
  6. InitializeComponent();
  7. }

假如有参数传入线程,使用下面这样的方法:

  1. private: System::Void BTN_Config_Click(System::Object^ sender, System::EventArgs^ e)
  2. {
  3. 。。。
  4. Thread^ formThread = gcnew Thread(gcnew System::Threading::ParameterizedThreadStart(instance, &Form1::myUARTThread));
  5. formThread->Start(20);
  6. 。。。
  7. }

如果传入的参数需要更新到窗体的控件中,则需要使用delegate的方法,如下:

  1. delegate void myUARTThreadDelegate(Object^ obj);
  2. private: void myUARTThread(Object^ obj)
  3. {
  4. ISynchronizeInvoke^ i = this;
  5. if (i->InvokeRequired)
  6. {
  7. myUARTThreadDelegate^ tempDelegate = gcnew myUARTThreadDelegate(this, &Form1::myUARTThread);
  8. cli::array<System::Object^>^ args = gcnew cli::array<System::Object^>(1);
  9. args[0] = obj;
  10. i->BeginInvoke(tempDelegate, args);
  11. return;
  12. }
  13. this->textBox_Receiver->Text = obj->ToString();
  14. }

最后需要注意的是myUARTThreadDelegate(Object^ obj);参数用的时Object^,不能直接用count等。

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/我家自动化/article/detail/610512
推荐阅读
相关标签
  

闽ICP备14008679号