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

نام تاپیک: استفاده از تایمر در thread

  1. #1

    Question استفاده از تایمر در thread

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

    چند تا سوال و کمک

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

    ممنون از همه

  2. #2
    کاربر دائمی آواتار Davidd
    تاریخ عضویت
    آذر 1392
    محل زندگی
    تهران
    پست
    391

    نقل قول: استفاده از تایمر در thread

    داخل thread نيازي به تايمر نيست. داخل ترد يك حلقه بنويس كه به صورت مداوم اجرا بشه و اتصال به اينترنت چك بشه. انتهاي حلقه هم از متد sleep استفاده كن تا نخ اون مدت زماني كه ميخاي معلق بشه در اين مورد Thread.sleep(60000) كه باعث ميشه هر بار كه حلقه اجرا شد يك دقيقه نخ معلق بشه.

  3. #3

    نقل قول: استفاده از تایمر در thread

    ممنون از راهنمایی شما .
    من این کار رو انجام دادم . مشکل اینجاست که داخل این ترد اینترنت چک میشه و متن یک لیبل باید تغییر بکنه .
    به قسمت تغییر متن که میرسه از برنامه اشکال میگیره و میگه که این لیبل در ترد دیگه ای ایجاد شده
    متن پیام
    Cross-thread operation not valid: Control 'lblInternetCheck' accessed from a thread other than the thread it was created on.
    ممنون میشم کمک کنید .راستش تا بحال با ترد ها کار نکردم

  4. #4
    کاربر دائمی آواتار sohil_ww
    تاریخ عضویت
    آذر 1391
    محل زندگی
    هر جا شادی باشه
    پست
    891

    نقل قول: استفاده از تایمر در thread

          void change_textbox()        {
    if(this.InvokeRequired)
    {
    this.Invoke(new MethodInvoker(change_textbox));
    }
    else
    {
    for(int i=0;i<500;i++)
    {
    textBox1.Text = i.ToString();


    }

    }
    }
    private void Form1_Load(object sender, EventArgs e)
    {
    Thread obj = new Thread(change_textbox);
    obj.Start();
    }


    اگه متوجه نشدی در خدمتم

  5. #5

    نقل قول: استفاده از تایمر در thread

    ممنون از کمک شما
    من از این کد به این صورت استفاده کردم

            private void InternetCheck()        {




    if (this.InvokeRequired)
    {
    this.Invoke(new MethodInvoker(InternetCheck));
    }
    else
    {
    for (int i=0;i==10000 ;i++ )
    {
    if (IsConnectedToInternet() != true)
    {
    lblInternetCheck.Text = "اینترنت قطع است";
    lblInternetCheck.ForeColor = Color.Red;
    picbInternetCheck.Image = Resources.Network_1_Delete;
    }
    else
    {
    lblInternetCheck.Text = "اینترنت وصل است";
    lblInternetCheck.ForeColor = Color.Green;
    picbInternetCheck.Image = Resources.Network_1_Check;
    }


    System.Threading.Thread.Sleep(30000);
    }



    }





    }


    ولی وقتی برنامه اجرا میشه و متد
    Thread tt = new Thread(InternetCheck);
    tt.Start();

    هیچ اتفاقی نمیفته
    و تغییرات اعمال نمیشه

  6. #6
    کاربر دائمی آواتار Davidd
    تاریخ عضویت
    آذر 1392
    محل زندگی
    تهران
    پست
    391

    نقل قول: استفاده از تایمر در thread

    نقل قول نوشته شده توسط sinayas مشاهده تاپیک
    for (int i=0;i==10000 ;i++ )
    اين حلقه كه اصلا اجرا نميشه چون شرط ورود به حلقه يعني , i==10000 هميشه false هست و وارد حلقه نميشه!

  7. #7

    نقل قول: استفاده از تایمر در thread

    فکر نمیکنم اشکال از حلقه باشه
    در هر صورت ممنون میشم اگه بیشتر کمک کنید

  8. #8

    نقل قول: استفاده از تایمر در thread

    دوستان ممنون میشم اگه بیشتر کمک کنید

  9. #9

    نقل قول: استفاده از تایمر در thread

    به جای == بنویس> احتمالاٌ مشکلتون حل میشه

  10. #10

    نقل قول: استفاده از تایمر در thread

    این کار رو هم کردم ولی مشکل حل نشد .
    وقتی برنامه شروع میشه ترد رو استارت میکنه و تا آخرین عدد حلقه رو تکرار میکنه و بعد بقیه کارها ادامه پیدا میکنه .
    دقیقا طوری رفتار میکنه که ترد دیگه ای نیست و در خود ترد اصلی برنامه اجرا شده .

  11. #11

    نقل قول: استفاده از تایمر در thread

    دوست عزیز همیشه سعی نکن که فقط کارتو راه بندازی سعی کن بهترین حالا نباشه حد اقل از روش تقریباٌ اصولی تبعیت کنی

    شاید کار شما با تایمر حل بشه ولی درست نیست با تایمر این کار را انجام بدی

    شما باید Asyn کد بزنی.
    برو Asynch Programming را بررسی کن. بعید بدونم که برای برای این کار بری Asynch را باد بگیری. ولی من امید دارم که این باعث بشه بری دنبالش

    93تون مبارک

  12. #12
    کاربر دائمی
    تاریخ عضویت
    دی 1383
    محل زندگی
    اصفهان
    پست
    1,436

    نقل قول: استفاده از تایمر در thread

    شما از یه طرف اومدی از Thread استفاده کردی و از طرف دیگه برای جلوگیری از مشکل Cross Thread کل کد رو با شرط this.InvokeRequired توی Thread مربوط به UI اجرا میکنی و این باعث میشه که کد مربوط به بررسی ارتباط در Thread ساخته شده اجرا نشه.فقط کدی که مربوط به ارتباط با UI (تغییر متن کنترل ها و ...) هست رو باید با Invoke در Thread UI اجرا کنید نه همه کد رو:

    private void InternetCheck()
    {
    for (int i=0;i < 10000 ;i++ )
    {
    bool connected = IsConnectedToInternet();
    this.Invoke(new MethodInvoker(SetStateControls), connected);
    Thread.Sleep(3000);
    }
    }

    private void SetStateControls(bool connected)
    {
    if (connected)
    {
    lblInternetCheck.Text = "اینترنت قطع است";
    lblInternetCheck.ForeColor = Color.Red;
    picbInternetCheck.Image = Resources.Network_1_Delete;
    }
    else
    {
    lblInternetCheck.Text = "اینترنت وصل است";
    lblInternetCheck.ForeColor = Color.Green;
    picbInternetCheck.Image = Resources.Network_1_Check;
    }
    }

  13. #13

    نقل قول: استفاده از تایمر در thread

    سلام
    از کلاس تایمر استفاده کنید:

    using System.Threading;




    class TimerExample
    {


    static void Main()
    {



    TimerCallback timerDelegate =
    new TimerCallback(CheckInternetConnection);

    Timer stateTimer = new Timer(timerDelegate, null, TimeSpan.FromMilliseconds(-1), TimeSpan.FromMinutes(1));

    }


    public void CheckInternetConnection(Object stateInfo)
    {

    //بررسی اینترنت

    });

    }

    }



    یادت باشه که داخل متد CheckInternetConnection اگه خواستی به کنترل های UI دسترسی داشته باشی از متد Invoke استفاده کن.

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

  1. سوال: آیا میشه از تایمر مثل Thread استفاده کرد؟؟
    نوشته شده توسط mohammad_71 در بخش C#‎‎
    پاسخ: 9
    آخرین پست: پنج شنبه 29 فروردین 1392, 10:00 صبح
  2. اجرای تایمر در Thread ؟
    نوشته شده توسط habedijoo در بخش VB.NET
    پاسخ: 2
    آخرین پست: چهارشنبه 31 فروردین 1390, 21:20 عصر
  3. استفاده از تایمر
    نوشته شده توسط Alireza-st در بخش VB.NET
    پاسخ: 1
    آخرین پست: پنج شنبه 24 آذر 1384, 11:04 صبح
  4. چگونگی استفاده از تایمر در asp.net
    نوشته شده توسط sm در بخش ASP.NET Web Forms
    پاسخ: 9
    آخرین پست: یک شنبه 15 آبان 1384, 20:24 عصر
  5. استفاده از تایمر
    نوشته شده توسط Dracula در بخش مباحث عمومی دلفی و پاسکال
    پاسخ: 2
    آخرین پست: دوشنبه 06 مرداد 1382, 22:46 عصر

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

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