backgroundWorker或Thread Cell ProgressBar读取DLL并显示treeView

时间:2014-08-22 02:54:11

标签: c# multithreading dll treeview backgroundworker

这个问题和答案 - > C# add child to Parents treeView

因为数据量巨大而陷入困境。如何backgroundWorker或Thread Cell ProgressBar

帮我实现backgroundWorker Thread Progress Bar

    private void button1_Click(object sender, EventArgs e)
    {
        backgroundWorker1.RunWorkerAsync();
    }


    private void button2_Click(object sender, EventArgs e)
    {
          //// Or by 
        Thread th1 = new Thread(new ThreadStart(fun1));
        th1.Start();
    }

  private void fun1()
    {

          ///   Business_tb_Language  IS ClassLibrary (DLL) return DataTable

            Business_tb_Language businessTbLanguage = new Business_tb_Language();
            DataTable dt1 = businessTbLanguage.bRead();

            LoadTreeView(dt1);
    }

    private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
    {

          ///   Business_tb_Language  IS ClassLibrary (DLL) return DataTable

            Business_tb_Language businessTbLanguage = new Business_tb_Language();
            DataTable dt1 = businessTbLanguage.bRead();

            LoadTreeView(dt1);
    }


    private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
    {
        if (e.Error != null)
        {
            MessageBox.Show("error");
        }else if (e.Cancelled)
        {
            MessageBox.Show("cancel");
            progressBar1.Value = 0;

        }
        else
        {
            MessageBox.Show("ok");
            progressBar1.Value = 0;
        }
    }





private void LoadTreeView(DataTable dt)
{
    var dNodes = new Dictionary<string, TreeNode>();

    foreach (DataRow dRow in dt.Rows)
    {
        string sSublang = dRow["Sub_lang"].ToString();
        string sCode = dRow["code"].ToString();
        string sName = dRow["name"].ToString();

        if (sSublang == "0")
        {
            var tn = treeView1.Nodes.Add(sCode, sName);
            dNodes.Add(sCode, tn);
        }
        else
        {
            string[] arrSubLang = sSublang.Split('_');

            for (int i = arrSubLang.Length - 1; i >= 0; i--)
            {
                string sFindCode = arrSubLang[i];
                var tnLastParent = default(TreeNode);

                if (dNodes.ContainsKey(sFindCode))
                {
                    var tn = dNodes[sFindCode];

                    if (tnLastParent != default(TreeNode))
                    {
                        tn.Nodes.Add(tnLastParent);
                        tnLastParent = tn;
                    }
                    else if (!dNodes.ContainsKey(sCode))
                    {
                        tnLastParent = tn.Nodes.Add(sCode, sName);
                        dNodes.Add(sCode, tnLastParent);
                    }
                }
            }

        }
    }

    treeView1.ExpandAll();
}

我的代码 功能错误 LoadTreeView(DataTable dt)

订单

var tn = treeView1.Nodes.Add(sCode,sName);

**文字错误**

System.Windows.Forms.dll中发生了'System.InvalidOperationException'类型的异常,但未在用户代码中处理 附加信息:正在从错误的线程调用正在对此控件执行的操作。使用Control.Invoke或Control.BeginInvoke对正确的线程进行Marshal来执行此操作。


读取 Business_tb_Language(IS ClassLibrary(DLL)返回DataTable) AND Show 在treeView BY backgroundWorker或Thread中Cell ProgressBar

解释更多:

此功能“LoadTreeView(DataTable dt)”和“Business_tb_Language”正确无误

但我想实现BY backgroundWorker或Thread Cell ProgressBar


谢谢。

0 个答案:

没有答案