现在我要实现一个功能 自动备份数据库的bak文件 当我设置好了时间  周期 然后根据这2个条件对数据库的文件进行备份
我已经把这个备份写成一个方法 我想知道如何用线程按照条件来调用这个备份方法?本来timer可以实现  但是公司前辈非要我用线程 我以前做web开发的 现在做winform 对多线程的概念模糊 求解答!

解决方案 »

  1.   


     //备份数据库数据文件
            private void SaveFileDialog()
            {
                string localFilePath;
                SaveFileDialog saveFileDialog1 = new SaveFileDialog();
                saveFileDialog1.InitialDirectory = Public.ClassPublic.strServerip;
                //设置文件类型   
                saveFileDialog1.Filter = "bak files(*.bak)|*.txt|All files(*.*)|*.*";            //设置默认文件类型显示顺序   
                saveFileDialog1.FilterIndex = 2;            ////保存对话框是否记忆上次打开的目录   
                //saveFileDialog1.RestoreDirectory = true;            //点了保存按钮进入   
                if (saveFileDialog1.ShowDialog() == DialogResult.OK)
                {
                    //获得文件路径   
                    localFilePath = saveFileDialog1.FileName.ToString();
                    this.txtBackupPath.Text = localFilePath;
                }
                //数据库连接
                ClassSqlserver db = new ClassSqlserver(ClassPublic.strConn);
                //打开数据库            db.Open();
                try
                {                string sql = string.Format("BACKUP DATABASE ryjk TO DISK ='{0}' with init", this.txtBackupPath.Text);
                    DataSet dt = db.ExecuteDataSet(sql);
                    if (dt == null)
                    {
                        MessageBox.Show("退出操作", "提示", MessageBoxButtons.OK);
                        return;
                    }
                    else
                    {
                        MessageBox.Show("数据库备份成功!", "提示", MessageBoxButtons.OK);
                    }
                }
                catch (Exception ex)
                {                throw ex;
                }
                finally
                {
                    //关闭数据库
                    db.Close();
                }这是备份的方法
      

  2.   


    using System.Threading;public void ParameterRun(object ms) 
    public void NonParameterRun() //不带参数的启动方法
    Thread nonParameterThread = new Thread(new ThreadStart(p.NonParameterRun));
    nonParameterThread.Start(); //带参数的启动方法
    Thread parameterThread = new Thread(new ParameterizedThreadStart(p.ParameterRun)); 
    parameterThread.Start(30);
      

  3.   


    能用Timer我就不会来发帖了- - 项目组长不让用 汗
      

  4.   

    翻开c#高级编程 关于多线程一章。先学习下线程的概念。你自己就会写了。
    timer不是多线程。没有分配内存空间,还是在ui线程上。不过说实话,楼主的需求用timer足够了。你们前辈可能是要你学习一下多线程,结果你小子跑这里要代码来了。给你前辈知道,肯定骂死你。
      

  5.   

    Thread t = new Thread(new ThreadStart(SaveFileDialog));
    t.IsBackground = true;
    t.Start();
      

  6.   

    save方法里面有个保存文件对话框,这个地方线程会等待UI响应,还是会停在那里。
    最好是能把保存文件的路径设置好,不用选择路径。那样多线程效果更好。
      

  7.   

    我记得Threading里的Timer是分配线程池里的线程