按照MSDN指南创建新线程来更新UI控件后,我收到一个奇怪的错误。我在load方法中运行了相同的查询,它运行得很好,现在在新线程中运行我得到了正确的结果数,但是我得到的字段名称只是在我的comboBox中写了16次DataSet。任何人都可以帮我这个吗?
private void Form1_Load(object sender, EventArgs e)
{
recipeListComboBox.Items.Clear();
Thread QueryThread = new Thread(new ThreadStart(updateRecipeList));
QueryThread.Start();
}
private void updateRecipeList()
{
IEnumerable<string> list = recipeList.getList();
foreach (string a in list)
UpdateRecipeComboBox(a);
}
private void UpdateRecipeComboBox(string text)
{
if (this.recipeListComboBox.InvokeRequired)
{
UpdateRecipeComboBoxCallBack d = new UpdateRecipeComboBoxCallBack(UpdateRecipeComboBox);
Invoke(d, new object[] { text });
}
else
{
this.recipeListComboBox.Items.Add(Text);
}
}
delegate void UpdateRecipeComboBoxCallBack(string text);
在我将它放在一个新线程之前,它看起来像这样:
private void Form1_Load(object sender, EventArgs e)
{
recipeListComboBox.Items.Clear();
IEnumerable<string> list = recipeList.getList();
foreach (string a in list)
recipeComboBox.Items.Add(a);
这会在数据库中重新显示16个不同收件人的列表,现在我只是将dataSet打印了16次。
感谢您的帮助!!
克雷格
答案 0 :(得分:3)
如果您再次打印"DataSet"
,我猜你正在使用DataSet
对象代替字符串参数并且它自动调用object.ToString()
它返回类的名称。
不确定这是否是你的问题,但你也有套管不匹配:
private void UpdateRecipeComboBox(string text)
{
if (this.recipeListComboBox.InvokeRequired)
{
UpdateRecipeComboBoxCallBack d = new UpdateRecipeComboBoxCallBack(UpdateRecipeComboBox);
Invoke(d, new object[] { text });
}
else
{
this.recipeListComboBox.Items.Add(Text); // <--- should be text???
}
}