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

نام تاپیک: هنگ کردن برنامه با وجود ترد ها

  1. #1
    کاربر دائمی
    تاریخ عضویت
    فروردین 1387
    محل زندگی
    www
    پست
    741

    Question هنگ کردن برنامه با وجود ترد ها

    برنامه زیر را در نظر بگیرید



    namespace WindowsFormsApplication1
    {
    public partial class Form1 : Form
    {
    public Form1 ()
    {
    InitializeComponent();
    }

    Thread t1;
    Thread t2;

    public delegate void dele (int a);
    dele nem;



    private void button1_Click (object sender , EventArgs e)
    {
    t1 = new Thread(new ThreadStart(dis));
    nem = new dele(chg);
    t1.IsBackground = true;
    t1.Start();

    }

    private void dis ()
    {
    for (int i = 0 ; i < 1000000 ; i++)
    {
    this.Invoke(nem , i);
    }
    }

    private void chg (int b)
    {
    listBox1.Items.Add(b);
    }


    private void button2_Click (object sender , EventArgs e)
    {
    t2 = new Thread(new ThreadStart(dis2));
    nem = new dele(chg2);
    t2.IsBackground = true;
    t2.Start();
    }


    private void dis2 ()
    {
    for (int j = 1000000 ; j < 2000000 ; j++)
    {
    this.Invoke(nem , j);
    }
    }


    private void chg2 (int b)
    {
    listBox2.Items.Add(b);
    }

    private void button3_Click (object sender , EventArgs e)
    {
    t1.Abort();
    }

    private void button4_Click (object sender , EventArgs e)
    {
    t2.Abort();
    }
    }
    }




    چرا پس از اجرای برنامه و زدن کلید 1 برنامه بدون هنگ کار میکنه ولی به محض اینکه کلید دوم که باعث شروع ترد دوم میشه برنامه هنگ میکنه

    کار این متد چیه ؟؟

    t1.IsBackground = true;


    آیا ارسال دو متد یا متغییر که در همین مثال هست به یک delegate صحیح هست
    ارسال متد chg و متد chg2 به دیلیگیت dele
    آخرین ویرایش به وسیله IMANAZADI : جمعه 28 مهر 1391 در 20:26 عصر

  2. #2

    نقل قول: هنگ کردن برنامه با وجود ترد ها

    چون هر دو از یک nem استفاده میکنند. بایستی nem = new dele(chg) قبل از حلقه ها باشه. بهتره نامهای متفاوت بدید تا مشکلی بوجود نیاد.
    یکی از تردها رو به اندازه 1 میلی ثانیه sleep کنید.
            Thread t1,t2;
    public delegate void dele(int a);
    dele nem1, nem2;
    private void button9_Click(object sender, EventArgs e)
    {
    t1 = new Thread(new ThreadStart(dis));
    t1.Start();
    }
    private void dis()
    {
    nem1 = new dele(chg);
    for (int i = 0; i < 100000; i++)
    {
    listBox1.Invoke(nem1, i);
    Thread.Sleep(1);
    }
    }
    private void chg(int b)
    {
    listBox1.Items.Add(b);
    }

    private void button10_Click(object sender, EventArgs e)
    {
    t2 = new Thread(new ThreadStart(dis2));
    t2.Start();
    }
    private void dis2()
    {
    nem2 = new dele(chg2);
    for (int j = 100000; j < 200000; j++)
    {
    listBox2.Invoke(nem2, j);
    }
    }
    private void chg2(int b)
    {
    listBox2.Items.Add(b);
    }

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

  1. نحوه مالتی ترد کردن برنامه ای که ساخته شده
    نوشته شده توسط saed2006 در بخش C#‎‎
    پاسخ: 2
    آخرین پست: دوشنبه 30 فروردین 1389, 12:07 عصر
  2. سوال: هنگ کردن برنامه در هنگام فعالیت
    نوشته شده توسط woeful در بخش C#‎‎
    پاسخ: 1
    آخرین پست: یک شنبه 18 بهمن 1388, 08:42 صبح
  3. هنگ کردن برنامه موقع سرچ کردن
    نوشته شده توسط ehsanes در بخش مباحث عمومی دلفی و پاسکال
    پاسخ: 7
    آخرین پست: سه شنبه 06 بهمن 1388, 15:22 عصر
  4. سوال: هنگ کردن برنامه
    نوشته شده توسط kiani_behzad در بخش C#‎‎
    پاسخ: 6
    آخرین پست: دوشنبه 08 تیر 1388, 23:10 عصر
  5. هنگ کردن برنامه بعد از مدتی بیکار بودن
    نوشته شده توسط saeedalone در بخش مباحث عمومی دلفی و پاسکال
    پاسخ: 8
    آخرین پست: یک شنبه 12 اسفند 1386, 14:28 عصر

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

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