اضافه کردن کامپوننت به فرم با استفاده از backgroundWorker
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
backgroundWorker1.RunWorkerAsync();
}
private void backgroundWorker1_DoWork(object sender, DoWorkEventArgs e)
{
System.Windows.Forms.Button a = new Button();
a.Location = new System.Drawing.Point(100, 60);
a.Size = new System.Drawing.Size(80, 70);
System.Windows.Forms.Form b = new Form();
b.Controls.Add(a);
b.Show();
}
این کدی که من نوشتم یک مثال است برای نشان دادن مشکلم
در زمان اجرا این کد برنامه (Not Responding) میشود! چرا؟ چگونه مشکلم را حل کنم؟
نقل قول: اضافه کردن کامپوننت به فرم با استفاده از backgroundWorker
داخل رویداد RunWorkerCompleted کدتون رو بنویسید...
نقل قول: اضافه کردن کامپوننت به فرم با استفاده از backgroundWorker
من در داخل این رویداد کدی ننوشتم ولی شما فرض کن کد زیر رو هر به برنامه اضافه کنیم
private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
MessageBox.Show("ok");
}
نقل قول: اضافه کردن کامپوننت به فرم با استفاده از backgroundWorker
منظور این بود که b.show رو داخل رویداد RunWorkerCompleted بنویسید..
موفق باشید...
نقل قول: اضافه کردن کامپوننت به فرم با استفاده از backgroundWorker
خیلی ممنون مشکلم حل شد
ولی می تونید علت بروز این مشکل رو برام توضیح بدید؟:متفکر:
نقل قول: اضافه کردن کامپوننت به فرم با استفاده از backgroundWorker
DoWork کارهایی رو انجام میده که باید در پشت صحنه انجام بشه.شما قبل از اینکه این کارها به پایان برسه(یعنی همون پروسه DoWork) فرمت رو show کردی و این باعث قفل شدن و NotRespond شدن اون میشد....
نقل قول: اضافه کردن کامپوننت به فرم با استفاده از backgroundWorker
ببخشید ولی سوال دیگه ای که تقریبا برای من مطرح شده : مگه نه اینکه متد CancelAsync در صورت برقراری خصوصیت WorkerSupportsCancellation باعث متوقف شدن رویداد DoWork میشود ؟
ولی اگه توی رویداد DoWork یه حلقه for داشته باشم متد CancelAsync باعث توقف کار نمیشه !
حالا اگه من توی رویداد DoWork یه حلقه for داشته باشم چطوری میتونم باعث توقف رویداد DoWork بشم؟
البته خودم میدونم که با تعریف سراسری متغیر شمارنده حلقه for و مقدار رهی آن می تونم حلقه رو تموم کنم ولی می خوام بدونم راه اصولی برای توقف DoWork در هر حالی دارم یا نه؟
با تشکر از پاسخ های جناب عالی
نقل قول: اضافه کردن کامپوننت به فرم با استفاده از backgroundWorker
سلام خدمت دوستان و اساتید و ... ( همه دیگه)
دوست عزیز در جواب سوال شما اگر در نظر بگیریم در یک backgroundworker در حلقه زیر هستیم و می خواهیم با cancelAsync کار متوقف شود به یک if در حلقه نیاز مندیم تا بفهمیم آیا کار ما cancel شده است یا خیر. همانند کد زیر:
while (true)
{
if (backgroundWorker.CancellationPending)
{
break;
}
}
MessageBox.Show("ahamdsystemco");
در ایجا backgroundWorker نام شی ء backgroundWorker است که همچنین می توانید آن را از راه Argument به متد پاس دهید و از آن استفاده کنید.
لازم به ذکر است که برای این کا رشما باید پراپرتی WorkerSupportsCancellation را در backgroundWorkerخود با true مقدار دهی کنید.
امیدوارم به جوابتان رسیده باشید.
با تشکر AHS
نقل قول: اضافه کردن کامپوننت به فرم با استفاده از backgroundWorker
سلام ...
من چند روزیه دارم درباره background workerجستجو می کنم همه مثالها تو این سایت و codprojectرو دیدم اما همشون تو فراخونی متد غیر همزمان از یک حلقه for یا while استفاده می کنن . ولی من تو برنامه ام می خوام در حین ورود کاربر به سیستم و یا گزارشگیری از bgwrker استفاده کنم و نمیتونم از حلقه for استفاده کنم . مثلا وقتی کاربر اطلاعات کاربری رو وارد میکنه و دکمه ورود رو کلیک میکنه تکه کد
DataTable dt = newDataTable();
DataBase db = newDataBase();
string str = "select * from login where usr = '" + textBox1.Text + "' and pas = '" + textBox2.Text + "' ";
dt = db.MySelect(str);
if (dt.Rows.Count == 0)
{
MessageBox.Show("این اطلاعات در جدول وجود ندارد");
}
else
{
Form2 ff = newForm2();
ff.ShowDialog();
}
اجرا میشه . اگه من از حلقه for استفاده نکنم چه جوری می تونم progress رو مقدار بدم .
تو فرم های گزارشگیری هم این مشکل رو دارم و می خوام پیشرفت کار رو به کاربر نشون بدم ولی نمی دونم قراره چند رکورد جستجو بشه چون هر گزارش چندین حالت داره که توسط combo , radio)شروط گزارش ) توسط کاربر انتخاب میشه و هر گزارش زمان متفاوتی طول میشکه..
ممنون میشم از راهنماییتون
نقل قول: اضافه کردن کامپوننت به فرم با استفاده از backgroundWorker
من منتظر جوابم . لطفا راهنمایی کنید:افسرده::افسرده::افسرده: