当前位置:编程学习 > C#/ASP.NET >>

C++.net如何跨线程调用windows控件?

我有一个线程,方法中想把字符串赋给某个textbox,但是发现不行,不能跨线程调用,网上查了很多,说用委托类型的 ,我试了 但是有时行 有时不行 有什么好的办法吗?最好能给我一个实际的例子,谢谢了! --------------------编程问答-------------------- 你搜索一下Invoke Delegate --------------------编程问答-------------------- 发送消息。WM_SETTEXT。
或者使用 Invoke,在UI线程里面使用委托来操作。 --------------------编程问答--------------------

// 该方法是在子线程里被调用的。
private void visualRMIServices_OnUnregisterMachine(Machine machineInServer)
{
   try
   {
       //创建一个委托实例
       SafeBindDataSourceHandler call = new SafeBindDataSourceHandler(this.BindDataSource);
       //用控件的Invoke方法,调用这个委托。
       this.dataGridView1.Invoke(call, new object[] { this.dataGridView1, visualRMIServices.MachineList });
   }
   catch (Exception ex)
   {
       MessageBox.Show(ex.Message);
   }
}

// 实际刷新画面的方法
private void BindDataSource(DataGridView dgw, object obj)
{
    dgw.DataSource = null;
    dgw.DataSource = obj;
    dgw.Refresh();
}

private delegate void SafeBindDataSourceHandler(DataGridView dgw, object obj);
--------------------编程问答-------------------- 楼上是C#的,有C++的吗 --------------------编程问答-------------------- 有两种方法:1、用postmessage发消息(因为线程支持句柄的传递,把textbox所属的对话框的句柄传给线程),用变量把字符串传出来(该变量为全局变量,这样线程内外都能访问),在响应的消息函数中把字符串赋给textbox。
2、把textbox设为类得静态变量,这样线程内外就都能访问了。 --------------------编程问答-------------------- 最好psotmessage --------------------编程问答-------------------- Control.Invoke.
补充:.NET技术 ,  VC.NET
CopyRight © 2022 站长资源库 编程知识问答 zzzyk.com All Rights Reserved
部分文章来自网络,