c# - 为什么即使使用了调用,组合框也会抛出异常
问题描述
我正在尝试从另一个线程设置组合框的选定项,但软件抛出异常并显示消息“跨线程操作无效。控制 xxx 从创建的线程以外的线程访问”
如果 ComboBox 上的 InvokeRequired 为真,我已经尝试使用 MethodInvoker,但我仍然收到异常。
public class ComboBoxAdapter
{
System.Windows.Forms.ComboBox comboBox;
//...
public void setSelectedItem( object item ) {
if ( comboBox.InvokeRequired )
comboBox.Invoke( new MethodInvoker( () => setSelectedItem( item ) ) );
comboBox.SelectedItem = item;
}
}
如果我像在我的代码中那样访问 ComboBox,我预计不会出现异常。
解决方案
你错过了一个else
public void setSelectedItem( object item ) {
if ( comboBox.InvokeRequired )
comboBox.Invoke( new MethodInvoker( () => setSelectedItem( item ) ) );
else
comboBox.SelectedItem = item;
}
否则,即使需要调用,您也可以直接更新控件。
推荐阅读
- python - python和pygame中的随机非重叠圆(控制圆数)
- css - CSS 对齐:flexbox/顺风对齐问题
- angular - TypeScript 编译器在使用 isNull 时抱怨空值
- python - 如何将 map 函数应用于 tf.Tensor
- python - Boto3 upload_file 静默失败
- azure - 一旦服务器经过最终故障转移并且 VM 在 Azure 中启动并运行,它是否与 Config Server 有任何关系?
- node.js - 微服务、API 网关和前端
- oracle - 对业务服务的服务调出在 OSB 中返回错误
- python - 如何在python中将数组列表转换为单个列表?
- git - 在 Git 中向分支添加更多提交