首页
学习
活动
专区
圈层
工具
发布
社区首页 >问答首页 >在ComboBox BackgroundWorker DoWork事件中读取DoWork值时出错

在ComboBox BackgroundWorker DoWork事件中读取DoWork值时出错
EN

Stack Overflow用户
提问于 2012-05-04 09:42:51
回答 3查看 3.2K关注 0票数 1

当我在BackgroundWorker DoWork事件中访问表单控件时,它从DatePicker读取值,但不从TextBoxComboBox读取值。

错误:

代码语言:javascript
复制
Cross-thread operation not valid: Control 'cmbProgram' accessed from a thread other than the thread it was created on.

代码:

代码语言:javascript
复制
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
    {
        string strDate = dtpDate.Value.ToString();

        string strProgram = cmbProgram.Text;

    }

它如何从DataPicker读取值(在不同的线程中)?

是否存在从BackgroundWorker DoWork事件访问窗体控件的解决方法?

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2012-05-04 09:53:15

使用:

代码语言:javascript
复制
Dispatcher.Invoke(new Action(() =>
           {
                string strDate = dtpDate.Value.ToString();
                string strProgram = cmbProgram.Text;

           }));
票数 2
EN

Stack Overflow用户

发布于 2012-05-04 09:49:22

不能从其他线程访问控件。解决该问题的通常方法是从UI线程读取当前值,然后将该值传递给第二个线程(或BackgroundWorker)。

可以通过将控件类上的CheckForIllegalCrossThreadCalls设置为false来禁用检查,但请注意不要这样做。

票数 2
EN

Stack Overflow用户

发布于 2012-05-04 09:53:38

你可以通过它作为一个论点。例如:

代码语言:javascript
复制
backgroundworker1.RunWorkerAsync(comboBox1.SelectedItem.ToString());

获取doWork中的内容

代码语言:javascript
复制
string Item = e.Argument.ToString();
票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/10446417

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档