多线程 delegate 有返回值得问题

aoyouke 2010-05-21 12:42:31
需求:线程从frm上面combobox取 text值cboWare.text

先描述一下问题:
Thread t = new Thread(new ThreadStart(test));
t.Start();

private void test()
{
string str=cboWare.text;
.......
}

运行会提示,线程间操作无效。
通过设置 Control.CheckForIllegalCrossThreadCalls = false;也是可以的 ,但是微软说不推荐,我想通过委托来写 ,这个应该怎样写?

设置值的话 我可以通过类式下面的语句来做,但是怎样写一个有返回值的委托呢?可能我想得太复杂了,希望得到更好的解决办法,谢谢大家!

//定义按钮得委托
delegate void ShowButtonDeletegate(Button btn, Boolean enable);
private void ShowButton(Button btn, Boolean enable)
{
if (btn.InvokeRequired)
{
ShowButtonDeletegate sbd = new ShowButtonDeletegate(ShowButton);
this.Invoke(sbd, new object[] {btn,enable });
}
else
{
btn.Enabled = enable;
}
}


...全文
93 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
mngzilin 2010-05-21
  • 打赏
  • 举报
回复
delegate object ShowButtonDeletegate(Button btn, Boolean enable);
mngzilin 2010-05-21
  • 打赏
  • 举报
回复
Object obj=this.Invoke(。。。);
ft207741 2010-05-21
  • 打赏
  • 举报
回复
回个贴看看有什么变化~
qiulg 2010-05-21
  • 打赏
  • 举报
回复
Invoke or BeginInvoke
violick 2010-05-21
  • 打赏
  • 举报
回复
[Quote=引用楼主 aoyouke 的回复:]
需求:线程从frm上面combobox取 text值cboWare.text

先描述一下问题:
Thread t = new Thread(new ThreadStart(test));
t.Start();

private void test()
{
string str=cboWare.text;
.......
}

运行会提示,线程间操作无效。
通过设……
[/Quote]

string ret = control.invoke() as string;
mngzilin 2010-05-21
  • 打赏
  • 举报
回复
delegate object GetControlTextDelgate();
aoyouke 2010-05-21
  • 打赏
  • 举报
回复
是这样吗?


delegate ComboBox GetControlTextDelgate();
private ComboBox GetControlText()
{

GetControlTextDelgate gtd = new GetControlTextDelgate(GetControlText);
ComboBox cbod = (ComboBox)this.Invoke(gtd);

return cbod.Text;




}

110,536

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧