【发布时间】:2015-03-10 16:26:20
【问题描述】:
您好,我有以下代码 将一些项目添加到组合框当我在一个线程中执行代码我有以下异常“特定转换无效”但是在主窗体线程中执行它时也不例外。 知道如何解决这个问题吗?
Control.CheckForIllegalCrossThreadCalls = false;
//Auto Complete
comboBox3.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
comboBox3.AutoCompleteSource = AutoCompleteSource.ListItems;
//no specific formatting
comboBox3.FormattingEnabled = true;
Thread th1 = new Thread(() =>
{
try
{
//# Code Start
//Some Text
String[] TicketStatus = new string[] { "a", "b", "c", "d", "e" };
//Throw Exception "Specific cast is not valid"
comboBox3.Items.AddRange(TicketStatus);
//# Code End
}
catch (Exception c) { MessageBox.Show(c.Message); }
});
th1.Start();
像这样没有例外
Control.CheckForIllegalCrossThreadCalls = false;
//Auto Complete
comboBox3.AutoCompleteMode = AutoCompleteMode.SuggestAppend;
comboBox3.AutoCompleteSource = AutoCompleteSource.ListItems;
//no specific formatting
comboBox3.FormattingEnabled = true;
//# Code Start
//Some Text
String[] TicketStatus = new string[] { "a", "b", "c", "d", "e" };
//Throw Exception "Specific cast is not valid"
comboBox3.Items.AddRange(TicketStatus);
//# Code End
【问题讨论】:
-
您不应该更新线程上的 gui 控件。搜索
control.Invoke()以从非 gui 线程更新控件。 -
尽管我不喜欢这个
CheckForIllegalCrossThreadCalls,但我不得不说你的代码在这里没有任何问题。