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

نام تاپیک: ایجاد چندین تایمر در یک حلقه با کد رویداد جداگانه

  1. #1

    ایجاد چندین تایمر در یک حلقه با کد رویداد جداگانه

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

  2. #2

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

    نقل قول نوشته شده توسط hamidkh مشاهده تاپیک
    با سلام
    من میخواستم به ازای هر ردیف در دیتابیسم یک تایمر درست کنم و هر کدام از تایمرها کد جداگانه ای در رویداد timer_tick دارن. ردیف های دیتابیستم کم و زیاد میشن و ثابت نیستن و باید در یک حلقه یا هر راهکار دیگه ای که میشه انجام بدم.
    میخواستم بدونم چطور میشه اینکا رو کرد. ممنون میشم کمک کنین.
    از هدف و روالی که برای این تایمر ها در نظر دارید اطلاعی ندارم ولی به احتمال زیاد استفاده از تایمر ایده خوبی نیست و روش مناسبی انتخاب نکرده اید.
    دو حالت کلی هست، شما یا دنبال پردازش همزمان برای اون ردیف ها هستید، یا دنبال پردازش به ترتیب داخل صف.
    اگر دنبال پردازش همزمان باشید تایمر مناسب نیست چون نمیتونه همزمان تیک بخوره.
    اگر هم دنبال پردازش به ترتیب داخل صف هستید، نیازی به چندین تایمر نیست.

    ساختن تایمر و فعال کردنش کار راحتی است اما اگر ایده تون این باشه که اون تایمر ها مستقل از هم عمل کنند و بتوانند همزمان تیک بخورند همچین اتفاقی رخ نمیده.
    روالی که داخل هر تیک تایمر دارید میتونه باعث تاخیر در تیک تایمر های دیگه بشه.
    مساله اینه که همه اون تایمر هایی که میسازید تیک شون توسط یک نخ مشترک مدیریت میشه، اگر در تیک یک تایمر کاری رو انجام بدهید عملا نخ رو مشغول کرده اید و تمامی تایمر های دیگه باید منتظر بمونند تا کار تموم بشه وگرنه نخ مشغول ئه و نمیتونه به تیک سایر تایمر ها بپردازه.
    اگر می خواهید پردازش هر ردیف مستقل از سایر ردیف ها باشه اصولا باید از طریق Task، Thread، ThreadPool یا BackgroundWorker و امثال اینها نخ جدیدی برای پردازش اختصاص بدهید.

    در هر صورت این مثالی از ایجاد تایمر ها در حلقه است :

    private void button1_Click(object sender, EventArgs e)
    {
    var records = new object[] { "Record1", "Record2", "Record3" };
    foreach (var record in records)
    {
    var t = new Timer();
    t.Tag = record;
    t.Interval = 1000;
    t.Tick += t_Tick;
    t.Start();
    }
    }

    private void t_Tick(object sender, EventArgs e)
    {
    var record = ((Timer)sender).Tag;
    // your code
    }

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

  1. پاسخ: 2
    آخرین پست: پنج شنبه 22 آبان 1393, 17:34 عصر
  2. پاسخ: 1
    آخرین پست: پنج شنبه 12 بهمن 1391, 11:21 صبح
  3. آنتی ویروسم همه ی فایل های اجرایی رو به عنوان ویروس تشخیص میده
    نوشته شده توسط nofuzi در بخش تالار های مرتبط با شبکه و امنیت
    پاسخ: 0
    آخرین پست: شنبه 06 فروردین 1390, 11:25 صبح
  4. چی کار کنیم کامپیوتر ویروسی نشه؟ و آیا آنتی ویروس براتون نصبه؟
    نوشته شده توسط حمید محمودی در بخش گفتگوی عمومی کامپیوتر و فناوری اطلاعات
    پاسخ: 17
    آخرین پست: سه شنبه 18 خرداد 1389, 09:47 صبح

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

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