-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の異なるレシピのリストが再実行され、dataSetが16回印刷されるようになりました。

助けてくれてありがとう!

クレイグ

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 に答える