我面对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表单应用程序,因为我只想使用我所知道的代码。
答案 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;
});
}