rahmatipoor
پنج شنبه 03 تیر 1395, 19:59 عصر
دوستان سلام
من وقتی میخوام دیتابیس رو با استفاده از بک گراند وورکر ریستور کنم ، متد ریستور اصلا اجرا نمیشه
کد :
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()); اجرا نمیشه و سی پی یو به شدت مشغول میشه
توضیح این که با همین روش عملیات بک آپ رو انجام دادم و هیچ مشکلی نداره
من وقتی میخوام دیتابیس رو با استفاده از بک گراند وورکر ریستور کنم ، متد ریستور اصلا اجرا نمیشه
کد :
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()); اجرا نمیشه و سی پی یو به شدت مشغول میشه
توضیح این که با همین روش عملیات بک آپ رو انجام دادم و هیچ مشکلی نداره