0

TreeView 内のすべてのデータベースをループしてから、復元するデータベース名として TreeNode を選択する必要があります。復元するデータベースを 1 つ、2 つ、または 3 つだけ選択すると、コードは正常に機能します。しかし、多くのデータベースを選択するとハングします。

私のコードをチェックして、私を助けてください..

            foreach (TreeNode tn in trvList.Nodes)
            {
                if (tn.Checked == true)
                { 
                        strFileName = GetFileTorestor(strRealdb);//Check File Directory to restore example : C:data\tn.text.
                        if (strFileName != "")
                        {
                            RestoreDatabase(res, tn);
                        }
                        else
                        {
                            strErorLog += "\r\n -" + tn.Text;
                            blIsEror = true;
                            MessageBox.Show("Database " + tn.Text + " has not found!", "Information", MessageBoxButtons.OK, MessageBoxIcon.Exclamation);
                        }                                 
                }
            }       


    /// <summary>
    /// Restore database according to treenode selected.
    /// </summary>
    /// <param name="res"></param>
    /// <param name="tn"></param>
    private void RestoreDatabase(Restore res,TreeNode tn)
    {
        res.Database = tn.Text;
        res.Action = RestoreActionType.Database;
        res.Devices.AddDevice(strFileName, DeviceType.File);
        res.ReplaceDatabase = true;
        this.pgrRestore.Value = 0;
        this.pgrRestore.Maximum = 100;
        //res.Complete += new ServerMessageEventHandler(sqlRestore_Complete);
        res.PercentCompleteNotification = 5;
        res.PercentComplete += new PercentCompleteEventHandler(sqlRestore_PercentComplete);
        res.SqlRestore(DBHelper.Server);
        stLog += "\r\n " + tn.Text + " from file " + strFileName;//Record database name already restore to log text
        txtLog.Text = stLog;
        txtLog.Refresh();
    }
4

1 に答える 1

5

UI がしばらくフリーズすることを意味する場合は、UI スレッドであるメイン スレッドで作業を実行しているためです。スレッドが作業中でビジーであるため、UI とのやり取りはできません。BackgroundWorkerバックグラウンドで作業を実行し、進行状況を UI に報告するには、 を参照する必要があります。

于 2012-06-03T04:19:53.670 に答える