نمایش نتایج 1 تا 4 از 4

نام تاپیک: عدم نمایش میزان پیشرفت عملیات بازیابی database هنگام استفاده از backgroundworker

  1. #1
    کاربر دائمی آواتار rahmatipoor
    تاریخ عضویت
    شهریور 1392
    محل زندگی
    ---
    پست
    418

    Exclamation عدم نمایش میزان پیشرفت عملیات بازیابی database هنگام استفاده از backgroundworker

    دوستان سلام
    من وقتی میخوام دیتابیس رو با استفاده از بک گراند وورکر ریستور کنم ، متد ریستور اصلا اجرا نمیشه
    کد :

    clsBackUp_Restore Mybk = new clsBackUp_Restore();
    BackgroundWorker BGW_1;
    //BackgroundWorker BGW_2;
    bool RunningState = false;


    public frmRestoreDataBase()
    {
    InitializeComponent();
    BGW_1 = new BackgroundWorker();
    //BGW_2 = new BackgroundWorker();

    BGW_1.DoWork += new DoWorkEventHandler(_DoWork);
    BGW_1.ProgressChanged += new ProgressChangedEventHandler(_ProgressChanged);
    BGW_1.RunWorkerCompleted += new RunWorkerCompletedEventHandler(_RunWorkerCompleted );
    BGW_1.WorkerReportsProgress = true;

    //BGW_2.DoWork += new DoWorkEventHandler(_DoWork2);

    }




    private void btnRestore_Click(object sender, EventArgs e)
    {
    try
    {
    //اجرای عملیات در پس زمینه
    BGW_1.RunWorkerAsync();
    }

    catch (Exception Exception)
    {
    Cursor.Current = Cursors.Default;
    MessageBox.Show(Exception.Message, "عملیات بازگردانی فایل پشتیبان با خطا مواجه شد!");
    }
    }



    void _DoWork(object sender, DoWorkEventArgs e)
    {
    RunningState = true;
    BGW_1.ReportProgress(0);
    Cursor.Current = Cursors.WaitCursor;

    Mybk.Restor_MyDataBase(txtBackUpPath.Text.Trim());
    RunningState = false;
    }


    void _ProgressChanged(object sender, ProgressChangedEventArgs e)
    {
    //محاسبه درصد پیشرفت عملیات
    int Percent = 0;
    while (RunningState)
    {
    Thread.Sleep(100);
    Percent = Mybk.Calc_Backup_Restor_ProgressPercent();
    if (Percent > 0)
    progressBar1.Value = Percent;

    }
    }

    void _RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
    {
    Cursor.Current = Cursors.Default;
    progressBar1.Value = 100;

    frmMessagBox Mymessage = new frmMessagBox();
    Mymessage.Text = "بازیابی فایل پشتیبان";
    Mymessage.Peygham = "عملیات بازیابی فایل پشتیبان با موفقیت انجام شد!";
    Mymessage.ShowDialog();
    this.Close();
    }


    اما همین متد خارج از dowork بدون هیچ مشکلی اجرا میشه
    البته مشکل بر میگرده به این دستور که میزان پیشرفت عملیات رو توی پروگرس بار نمایش میده.



    BGW_1.ReportProgress(0);


    وقتی این خط هست اصلا خط Mybk.Restor_MyDataBase(txtBackUpPath.Text.Trim()); اجرا نمیشه و سی پی یو به شدت مشغول میشه

    توضیح این که با همین روش عملیات بک آپ رو انجام دادم و هیچ مشکلی نداره
    آخرین ویرایش به وسیله rahmatipoor : پنج شنبه 03 تیر 1395 در 20:08 عصر

  2. #2
    کاربر دائمی آواتار mrprestige
    تاریخ عضویت
    مرداد 1393
    محل زندگی
    کرج
    پست
    646

    نقل قول: عدم نمایش میزان پیشرفت عملیات بازیابی دیتابیس هنگام استفاده از بک گراند وورکر

    سلام دوست من وقتت بخیر ، دوست من شما خاصیت WorkerReportsProgress مربوط به Backgroundworker رو برابر True ندادید ؟

  3. #3
    کاربر دائمی آواتار rahmatipoor
    تاریخ عضویت
    شهریور 1392
    محل زندگی
    ---
    پست
    418

    نقل قول: عدم نمایش میزان پیشرفت عملیات بازیابی database هنگام استفاده از backgroundworker

    سلام خیلی ممنونم از لطف و توجهتون
    خط 16 کد رو ببینید انجام دادم. true کردم.
    همچنن توی پست قبلی گفتم که با همین کد عملیات بک آپ رو انجام میدم مشکلی نداره.
    البته الآن مشکل رو متوجه شدم. قبلا هم که از بک گراند وورکر استفاده نمی کردم این مشکل باز بود. توی حالت بک آپ گیری میشه چند تا کانکشن به دیتابیس بر قرار کرد و دیتابیس جواب میده . اما برای ریستور فقط یک کانکشن میشه بر قرار کرد و چون اون تکه کدی که باید میزان پیشرفت عملیات رو از دیتابیس ( master ) بخونه ، قبلش یه کانکشن برقرار کرده ، دیگه کامند مربوط به عملیات ریستور نمیتونه ارتباط با دیتابیس برقرار کنه.
    شما میدونید راه حل برطرف کردن این مشکل چیه ؟
    یادم رفت بگم که من از Ado.net استفاده می کنم.
    آخرین ویرایش به وسیله rahmatipoor : جمعه 04 تیر 1395 در 16:32 عصر

  4. #4
    کاربر دائمی آواتار rahmatipoor
    تاریخ عضویت
    شهریور 1392
    محل زندگی
    ---
    پست
    418

    نقل قول: عدم نمایش میزان پیشرفت عملیات بازیابی database هنگام استفاده از backgroundworker

    از این کد هم برای ریستور کردن دیتابیس استفاده می کنم

    public void Execute_Restore(string BackUpPath)
    {
    try
    {
    if (MyCn.State == ConnectionState.Closed)
    {
    MyCn.Open();
    }

    //Excute SQL

    SqlCommand MyCmd;

    MyCmd = new SqlCommand(@" use master
    RESTORE DATABASE [Toomar] from DISK ='"
    + BackUpPath +
    @"' with replace ;
    ALTER DATABASE [Toomar] SET MULTI_USER ", MyCn);
    MyCmd.CommandTimeout = 0;
    MyCmd.ExecuteNonQuery();


    //-------------------------------------------------------------------------
    MyCn.Close();
    MyCn.Dispose();

    }
    catch
    {
    MyCn.Close();
    MyCn.Dispose();
    }
    }


تاپیک های مشابه

  1. پاسخ: 0
    آخرین پست: چهارشنبه 21 فروردین 1392, 18:39 عصر
  2. پاسخ: 2
    آخرین پست: جمعه 07 خرداد 1389, 19:02 عصر
  3. نمایش میزان پیشرفت پروسه
    نوشته شده توسط vb study در بخش برنامه نویسی در 6 VB
    پاسخ: 4
    آخرین پست: دوشنبه 30 شهریور 1388, 14:30 عصر
  4. سوال: عدم نمایش راهنما اکسس هنگام استفاده از F1
    نوشته شده توسط mehdi_fiz در بخش Access
    پاسخ: 1
    آخرین پست: پنج شنبه 15 اسفند 1387, 18:01 عصر
  5. سوال: عدم نمایش صحیح متون فارسی هنگام استفاده از تابع htmlentities
    نوشته شده توسط Jason.Bourne در بخش PHP
    پاسخ: 5
    آخرین پست: چهارشنبه 30 مرداد 1387, 00:59 صبح

قوانین ایجاد تاپیک در تالار

  • شما نمی توانید تاپیک جدید ایجاد کنید
  • شما نمی توانید به تاپیک ها پاسخ دهید
  • شما نمی توانید ضمیمه ارسال کنید
  • شما نمی توانید پاسخ هایتان را ویرایش کنید
  •