【发布时间】:2013-12-03 17:17:26
【问题描述】:
我正在尝试使用委托以 c# 形式返回组合框选定的索引。但是,当我使用下面的方法时,它可以工作。
delegate void dttypeDelegate();
object searchType = Invoke(new dttypeDelegate(() =>
{
return dbtype.SelectedIndex;
}));
上述方法将组合框选择的索引返回为我能够以字符串形式检索的对象搜索类型。但是,方法。
delegate int dttypeDelegate();
private int searchType()
{
int i = 0;
if (dbtype.InvokeRequired)
{
dttypeDelegate dt = new dttypeDelegate(searchType);
this.Invoke(dt);
}
else
{
i = dbtype.SelectedIndex;
}
i = dbtype.SelectedIndex;
return i;
}
抛出一个异常 dbtype.SelectedIndex; 是从线程而不是它创建的方法访问的。PLs 我想知道为什么异常?两者有什么不同?
【问题讨论】:
-
在检查
InvokeRequired之前访问dbtype.SelectedIndex -
我认为第一个代码行不通,因为委托没有返回任何内容(void),但是您在其中包装了一个返回
int的方法,它怎么能工作? -
我以前也一样。但是,我更改后它仍然给出异常。
-
现在,即使
InvokeRequired为真,您也可以从其他线程(最后一个 SelectedIndex)访问它。 -
糟糕的问题标题。