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

نام تاپیک: اضافه کردن کامپوننت به فرم با استفاده از backgroundWorker

  1. #1

    اضافه کردن کامپوننت به فرم با استفاده از 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) میشود! چرا؟ چگونه مشکلم را حل کنم؟

  2. #2
    VIP آواتار Sajjad.Aghapour
    تاریخ عضویت
    مهر 1386
    محل زندگی
    اهل کاشانم .. روزگارم بد نیست
    پست
    1,265

    نقل قول: اضافه کردن کامپوننت به فرم با استفاده از backgroundWorker

    داخل رویداد RunWorkerCompleted کدتون رو بنویسید...
    Close your eyes, take a deep breath, click your heels three times, and say, "There's no better thing than Inversion of Control and Dependency Injection, generic specialization, the decorator pattern, chains of responsibilities, and extensible software."

  3. #3

    نقل قول: اضافه کردن کامپوننت به فرم با استفاده از backgroundWorker

    من در داخل این رویداد کدی ننوشتم ولی شما فرض کن کد زیر رو هر به برنامه اضافه کنیم

    private void backgroundWorker1_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
    {
    MessageBox.Show("ok");
    }

  4. #4
    VIP آواتار Sajjad.Aghapour
    تاریخ عضویت
    مهر 1386
    محل زندگی
    اهل کاشانم .. روزگارم بد نیست
    پست
    1,265

    نقل قول: اضافه کردن کامپوننت به فرم با استفاده از backgroundWorker

    منظور این بود که b.show رو داخل رویداد RunWorkerCompleted بنویسید..
    موفق باشید...
    Close your eyes, take a deep breath, click your heels three times, and say, "There's no better thing than Inversion of Control and Dependency Injection, generic specialization, the decorator pattern, chains of responsibilities, and extensible software."

  5. #5

    نقل قول: اضافه کردن کامپوننت به فرم با استفاده از backgroundWorker

    خیلی ممنون مشکلم حل شد

    ولی می تونید علت بروز این مشکل رو برام توضیح بدید؟

  6. #6
    VIP آواتار Sajjad.Aghapour
    تاریخ عضویت
    مهر 1386
    محل زندگی
    اهل کاشانم .. روزگارم بد نیست
    پست
    1,265

    نقل قول: اضافه کردن کامپوننت به فرم با استفاده از backgroundWorker

    DoWork کارهایی رو انجام میده که باید در پشت صحنه انجام بشه.شما قبل از اینکه این کارها به پایان برسه(یعنی همون پروسه DoWork) فرمت رو show کردی و این باعث قفل شدن و NotRespond شدن اون میشد....
    Close your eyes, take a deep breath, click your heels three times, and say, "There's no better thing than Inversion of Control and Dependency Injection, generic specialization, the decorator pattern, chains of responsibilities, and extensible software."

  7. #7

    نقل قول: اضافه کردن کامپوننت به فرم با استفاده از backgroundWorker

    ببخشید ولی سوال دیگه ای که تقریبا برای من مطرح شده : مگه نه اینکه متد CancelAsync در صورت برقراری خصوصیت WorkerSupportsCancellation باعث متوقف شدن رویداد DoWork میشود ؟

    ولی اگه توی رویداد DoWork یه حلقه for داشته باشم متد CancelAsync باعث توقف کار نمیشه !

    حالا اگه من توی رویداد DoWork یه حلقه for داشته باشم چطوری میتونم باعث توقف رویداد DoWork بشم؟

    البته خودم میدونم که با تعریف سراسری متغیر شمارنده حلقه for و مقدار رهی آن می تونم حلقه رو تموم کنم ولی می خوام بدونم راه اصولی برای توقف DoWork در هر حالی دارم یا نه؟

    با تشکر از پاسخ های جناب عالی

  8. #8
    کاربر تازه وارد
    تاریخ عضویت
    آذر 1387
    محل زندگی
    اصفهان - اصفهان
    سن
    33
    پست
    99

    نقل قول: اضافه کردن کامپوننت به فرم با استفاده از backgroundWorker

    سلام خدمت دوستان و اساتید و ... ( همه دیگه)

    دوست عزیز در جواب سوال شما اگر در نظر بگیریم در یک backgroundworker در حلقه زیر هستیم و می خواهیم با cancelAsync کار متوقف شود به یک if در حلقه نیاز مندیم تا بفهمیم آیا کار ما cancel شده است یا خیر. همانند کد زیر:
    while (true)
    {
    if (backgroundWorker.CancellationPending)
    {
    break;
    }
    }
    MessageBox.Show("ahamdsystemco");

    در ایجا backgroundWorker نام شی ء backgroundWorker است که همچنین می توانید آن را از راه Argument به متد پاس دهید و از آن استفاده کنید.

    لازم به ذکر است که برای این کا رشما باید پراپرتی WorkerSupportsCancellation را در backgroundWorkerخود با true مقدار دهی کنید.

    امیدوارم به جوابتان رسیده باشید.

    با تشکر AHS

  9. #9
    کاربر دائمی آواتار hana2064
    تاریخ عضویت
    تیر 1387
    محل زندگی
    یه جای خوش اب و هوا
    پست
    129

    نقل قول: اضافه کردن کامپوننت به فرم با استفاده از 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)شروط گزارش ) توسط کاربر انتخاب میشه و هر گزارش زمان متفاوتی طول میشکه..
    ممنون میشم از راهنماییتون

  10. #10
    کاربر دائمی آواتار hana2064
    تاریخ عضویت
    تیر 1387
    محل زندگی
    یه جای خوش اب و هوا
    پست
    129

    Unhappy نقل قول: اضافه کردن کامپوننت به فرم با استفاده از backgroundWorker

    من منتظر جوابم . لطفا راهنمایی کنید

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

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