C++.net如何跨线程调用windows控件?
我有一个线程,方法中想把字符串赋给某个textbox,但是发现不行,不能跨线程调用,网上查了很多,说用委托类型的 ,我试了 但是有时行 有时不行 有什么好的办法吗?最好能给我一个实际的例子,谢谢了! --------------------编程问答-------------------- 你搜索一下Invoke Delegate --------------------编程问答-------------------- 发送消息。WM_SETTEXT。或者使用 Invoke,在UI线程里面使用委托来操作。 --------------------编程问答--------------------
--------------------编程问答-------------------- 楼上是C#的,有C++的吗 --------------------编程问答-------------------- 有两种方法:1、用postmessage发消息(因为线程支持句柄的传递,把textbox所属的对话框的句柄传给线程),用变量把字符串传出来(该变量为全局变量,这样线程内外都能访问),在响应的消息函数中把字符串赋给textbox。
// 该方法是在子线程里被调用的。
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);
2、把textbox设为类得静态变量,这样线程内外就都能访问了。 --------------------编程问答-------------------- 最好psotmessage --------------------编程问答-------------------- Control.Invoke.
补充:.NET技术 , VC.NET