-1

在按照 MSDN 指南创建一个新线程来更新 UI 控件后,我遇到了一个奇怪的错误。我在 load 方法中运行了同样的查询,它工作得很好,现在在新线程中运行我得到了正确数量的结果,但是我没有得到字段的名称,而是在我的组合框中写入了 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 个不同接收方的列表,现在我只打印了 16 次 dataSet。

谢谢你的帮助!!

克雷格

4

1 回答 1

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???
    }
}
于 2012-10-24T21:27:22.580 回答