指定的强制转换在自动完成源中无效

时间:2014-09-07 14:44:17

标签: c# winforms

我面对System.InvalidCastException:指定的强制转换是无效的,我使用了儿童表单和来自ShowDialog()的异常抛出我搜索它并找到一个线索,这种情况以子形式发生多线程可以解决它 所以,我尝试使用多线程但它没有解决。 我试图创建新的解决方案放置代码并运行它 但是再次抛出异常。这是代码,我使用click事件来运行构造aotucomplete的方法来查找究竟引发异常的位置。

private void AutoCompleteSource()
{
    AutoCompleteStringCollection auto = new AutoCompleteStringCollection();
    auto.Add("text");
    textbox.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.CustomSource;
    textbox.AutoCompleteMode = AutoCompleteMode.Suggest;
    textbox.AutoCompleteCustomSource = auto;
}
textbox.AutoCompleteCustomSource = auto;抛出

异常 我尝试再次使用多线程但无法修复它并且System.InvalidOperationException从中抛出 textbox.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.CustomSource;
这是多线程的代码。

private void button1_Click(object sender, EventArgs e)
{
    Thread gg = new Thread(new ThreadStart(AutoCompleteSource));
    gg.Start();
}

所以,我试图删除auto.Add("text");并使用一个事件只调用该方法,最后它工作正常......!

有没有人遇到这个问题并且可以解决它? 我想知道这是不是错误,我必须将文本框更改为组合框。

修改
我通过将[STAThread]添加到静态Main方法的顶部来解决它。 我已经说过我创建了新的解决方案,但是我从不单击Window表单应用程序,因为我只想使用我所知道的代码。

1 个答案:

答案 0 :(得分:0)

在非UI线程的线程上访问BeginInvoke时,您需要Controls

private void AutoCompleteSource()
{
    textbox.BeginInvoke((Action) delegate {
        AutoCompleteStringCollection auto = new AutoCompleteStringCollection();
        auto.Add("text");
        textbox.AutoCompleteSource = System.Windows.Forms.AutoCompleteSource.CustomSource;
        textbox.AutoCompleteMode = AutoCompleteMode.Suggest;
        textbox.AutoCompleteCustomSource = auto;
    });
}