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

نام تاپیک: مشكل با Thread

  1. #1

    مشكل با Thread

    با سلام خدمت دوستان من توي برنامه ام به يه مشكل برخوردم ، اگه ميشه راهنمايي كنيد :

    شرح :



    namespace ThreadProblem
    {
    public partial class Form1 : Form
    {

    public Form1()
    {
    InitializeComponent();
    Thread thread1 = new Thread(new ThreadStart(working));
    thread1.IsBackground = true;
    thread1.Start();
    }
    public void working()
    {
    Form2 f = new Form2();
    f.Show();

    while (true) Thread.Sleep(1000);
    }
    }
    }



    وقتي Form2 شو ميشه نميشه باش كار كرد يعني قفل ميشه اگه هم حلقه while رو ننويسم كار ترد تموم ميشه و فرم 2 بسته ميشه .
    من چي كار كنم كه تا زماني كه فورم 2 برنامه بازه كار thread تموم نشه .

    البته ميخوام وقتي فرم اصلي رو ميبندم همه thread ها از بين برن. پس بايد thread1.IsBackground = true باشه ..
    راه حلي داريد ؟

    با تشكر.

  2. #2

    نقل قول: مشكل با Thread

    یکی از آسون ترین کارهایی که میتونین انجام بدین اینه که داخل کلاس Form2 تون یه متغییر boolean از نوع استاتیک
    بذارین و موقع لود شدن فرم اونو true کنین و بعد از بسته شدن اونو false کنین
    و تو حلقتون این متغییر رو چک کنین.

    فقط من دقیقا هدفتون از این کارو نفهمیدم اگه بگین بهتر میشه راهنماییتون کرد.
    بازم اگه سوالی بود در خدمتم.

  3. #3

    نقل قول: مشكل با Thread

    اين كار كمكي نميكنه . چون بازم در اينصورت form2 قفل ميشه .

    فقط من دقیقا هدفتون از این کارو نفهمیدم اگه بگین بهتر میشه راهنماییتون کرد.
    من ميخوام فرم2 كه داخل ترد ساخته شده ، با بستن فرم2 از بين بره و نه با تمام شدن كار ترد .

  4. #4

    نقل قول: مشكل با Thread

    سلام،
    شما بعد از Show کردن فرم 2 نخ را در داخل یک حلقه بی پایان برای همیشه به خواب فرو بردی و این باعث همان قفل کردن می شود که نمی دونم چرا این کار رو کردی.
    باید برای رویداد FormClosed فرم 2 کدی یک EventHandler بنویسی و در اون بگی که نخ باید Abort بشه.

  5. #5

    نقل قول: مشكل با Thread

    اگه میخواین کدتون رو آپ کنید تا یه نگاهی بهش بندازیم.

    دقیقا منظورتون از قفل کردن چیه؟

  6. #6

    نقل قول: مشكل با Thread

    ThreadProblem.zip

    اين فايل برنامه است

    من ميخوام داخل ترد ، فرم 2 رو شو كنم. ولي مشكل اينه كه با تموم شدن دستورات ترد فرم از بين ميره . من ميخوام نره و براي همين يك حلقه گذاشتم.

    اصلا آيا ميشه به جاي اين كه ترد ورودي نام تابع بگيره به جاش يك فرم بگيره يعني من يك "ترد فرم" داشته باشم ؟؟

  7. #7

    نقل قول: مشكل با Thread

    ببین بعد از اینکه Form2 رو نمایش دادی Thread رو Suspend کن و همونطور که گفتم تو رویداد FormClosed فرم 2 Thread رو Abort کن.

  8. #8

    نقل قول: مشكل با Thread

    بجاي Show از ShowDialog استفاده كنيد و اون حلقه While رو حذف كنيد. توي رويداد Form_Closed فرم اصلي هم از Application.ExitThread استفاده كنيد.
    اصلا آيا ميشه به جاي اين كه ترد ورودي نام تابع بگيره به جاش يك فرم بگيره يعني من يك "ترد فرم" داشته باشم ؟؟
    اين رو متوجه نشدم ولي فكر كنم منظورتون كد زير باشه
     public void working() {     Application.Run(new Form2()); }
    آخرین ویرایش به وسیله Reza_Yarahmadi : چهارشنبه 22 دی 1389 در 16:01 عصر

  9. #9

    نقل قول: مشكل با Thread

    نقل قول نوشته شده توسط tooraj_azizi_1035 مشاهده تاپیک
    ببین بعد از اینکه Form2 رو نمایش دادی Thread رو Suspend کن و همونطور که گفتم تو رویداد FormClosed فرم 2 Thread رو Abort کن.
    اون كار رو كردم ولي بعد از Suspend كردن T، فرم2 بازم قفل ميشه .

    دوما چگونه ميتونم ترد رو به عنوان آرگومان به فرم2 بفرستم ؟ يعني چطوري ميتونم اشاره گر ترد رو به فرم2 بفرستم ؟(Call by Refrence)

  10. #10

    نقل قول: مشكل با Thread

    بجاي Show از ShowDialog استفاده كنيد و اون حلقه While رو حذف كنيد.
    Application.Run(new Form2());
    اين دو تقريبا مشابه هم عمل ميكنن .فكر كنم بتونم با ShowDialog كارمو راه بندازم . ولي با كد دوم Application.Run نميشه به اجزاي فرم2 دسترسي داشته باشم چون داخل برنامه هندلي نداره !!! يا نه ؟؟ (نام متغيير نداره)

  11. #11

    نقل قول: مشكل با Thread

    اين دو تقريبا مشابه هم عمل ميكنن
    در ظاهر کار شبیه هستند ولی در زیر ساخت با هم تفاوت های زیادی دارند.
    ولي با كد دوم Application.Run نميشه به اجزاي فرم2 دسترسي داشته باشم چون داخل برنامه هندلي نداره !!! يا نه ؟؟ (نام متغيير نداره)
    نمیدونم به چه دلیل نیاز دارید با نام متغیر کار کنید ولی کد بالا رو بصورت زیر هم میشه نوشت.
    Form2 f = new Form2();
    Application.Run(f);

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

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