সি # তে টাইমার পুনরায় সেট করবেন কীভাবে?


114

তিন আছে Timerশ্রেণীর যে আমি সচেতন আছি System.Threading.Timer, System.Timers.Timerএবং System.Windows.Forms.Timer, কিন্তু এই কেউই একটি আছে .Reset()ফাংশন যা 0 বর্তমান ব্যায়িত সময় রিসেট হবে।

এখানে কোন ছাত্রলীগের ক্লাস রয়েছে যার এই কার্যকারিতা রয়েছে? এটি করার কোনও নন-হ্যাক উপায় আছে? (আমি ভেবেছিলাম সম্ভবত এটির সময়সীমা পরিবর্তন করা এটি পুনরায় সেট করতে পারে) ভেবেছিলেন Timerযে এই শ্রেণিবদ্ধতাটি রয়েছে এমন কোনও শ্রেণীর পুনরায় প্রতিস্থাপন করা কতটা কঠিন হবে , বা ছাত্রলীগের কোনও শ্রেণির সাথে এটি নির্ভরযোগ্যভাবে কীভাবে করবেন?


3
জেপির সমাধান ব্যবহার করে একটি এক্সটেনশন পদ্ধতি ব্যবহার করুন
বেনপিয়াস

আমারও পুনরায় সেট করার একই চাহিদা রয়েছে এবং একই কারণে উল্লিখিত হয়েছে, ফাইলসিস্টেমওয়াটারটি ব্যবহার করা অপ্রীতিকর এবং অসুবিধে হয়
জন লেউন

আপনি যদি টাইমার জন্য স্টপওয়াচ ব্যবহার করেন এবং এক্সটেনশন পদ্ধতির উত্তরের সাথে যান তবে সাবধান হন কারণ স্টপওয়াচ estআরস্টার্ট এক্সটেনশন পদ্ধতিটি নেট নেট in.০ এ চলেছে। msdn.microsoft.com/en-us/library/…
si618

উত্তর:


148

আমি সর্বদা করি ...

myTimer.Stop();
myTimer.Start();

... এটা কি হ্যাক? :)

থ্রেডিং.টাইমারে মন্তব্য প্রতি, এটি পরিবর্তন পদ্ধতি ...

ডায়াটাইম টাইপ: System.Int32টাইমার তৈরি হওয়ার সময় ডাকে কলব্যাক পদ্ধতিটি নির্ধারণের আগে বিলম্বের সময় পরিমাণ, মিলি সেকেন্ডে। Timeout.Infiniteটাইমারটি পুনরায় আরম্ভ হতে আটকাতে নির্দিষ্ট করুন । তাত্ক্ষণিকভাবে টাইমার পুনরায় চালু করতে শূন্য (0) নির্দিষ্ট করুন।


অন্য সমস্যাটি হ'ল কেবল ফর্মস.টাইমারের সাথে ডেকে আনে এবং আমার অ্যাপ্লিকেশনটিতে কোনও জিইউআই (অ্যাপ্লিকেশন.স্টার্ট () কোনও প্যারামিটার নেই) রয়েছে, তাই আমি মনে করি যে থ্রেডিং। টাইমার শ্রেণি অন্যান্য কারণে ভাল, তবে ভাল পয়েন্ট।
ম্যাথু শার্লে

3
@ ম্যাথুজ: বিভিন্ন টাইমার ক্লাসের আলোচনার জন্য এবং সেগুলি ব্যবহার করার সময় উপযুক্ত কিনা এমএসডিএন.মাইক্রোসফটকম /en-us/magazine/cc164015.aspx দেখুন । সাধারণভাবে, তবে Forms.Timerকেবল একটি জিইউআই ব্যবহার করা উচিত। তবে, পাশাপাশি Forms.Timerএবং Threading.Timerএছাড়াও আছে Timers.Timer
ব্রায়ান

60

সমস্ত টাইমারগুলির সিস্টেম.থ্রেডিং.টাইমারের ব্যতীত স্টার্ট () এবং স্টপ () পদ্ধতির সমতুল্য রয়েছে।

সুতরাং একটি এক্সটেনশন পদ্ধতি যেমন ...

public static void Reset(this Timer timer)
{
  timer.Stop();
  timer.Start();
}

... এটি সম্পর্কে একটি উপায়।


1
আমি অতিবাহিত সময় পরিমাপ করতে চাই না। এর জন্য আমার সঠিক ব্যবহারক্ষেত্রটি হ'ল আমার কাছে একটি ফাইলসিস্টেমওয়াটার একটি ডিরেক্টরি দেখছে এবং বিভিন্ন গ্রুপের পরিবর্তনগুলি (যেমন, একে অপরের উদাহরণস্বরূপ 5s এর মধ্যে করা পরিবর্তনগুলি) ধরতে চাই। থিয়োরিটি হ'ল যে প্রথম পরিবর্তনটি এমন একটি টাইমার শুরু হয় যা প্রতিটি পরিবর্তনের সাথে পুনরায় সেট হয়ে যায় যতক্ষণ না এটি শেষ পর্যন্ত গুলি চালায় এবং গোষ্ঠীটি বন্ধ করে দেয়।
ম্যাথু শার্লে

হ্যাঁ, আমি স্পষ্ট করেছিলাম যখন আমি আপনার প্রশ্নটি পুনরায় পড়ি। আমার উত্তর সম্পাদনা।
ড্যান

এটি কাজ করে এবং এটি লক্ষণীয় গুরুত্বপূর্ণ যে আপনি যদি কেবল কল করেন তবে এটি কাজ করবে না timer.Start()। এটি পরীক্ষা করার জন্য আমি এই লিনকপ্যাড ক্যোয়ারী তৈরি করেছি। timer.Stopএটি মুছে ফেলার চেষ্টা করুন এবং আপনি পার্থক্যটি দেখতে পাবেন।
জারেড সৈকত

30

জন্য System.Timers.Timer, MSDN ডকুমেন্টেশন অনুযায়ী, http://msdn.microsoft.com/en-us/library/system.timers.timer.enabled.aspx :

টাইমার শুরু হওয়ার পরে যদি বিরতি সেট করা হয়, তবে গণনাটি পুনরায় সেট করা হয়। উদাহরণস্বরূপ, আপনি যদি ব্যবধানটি 5 সেকেন্ডে সেট করে থাকেন এবং তারপরে সক্ষমযোগ্য সম্পত্তিটিকে সত্যে সেট করেন, সক্ষমিত সেট হওয়ার সময় থেকে গণনা শুরু হয়। গণনাটি 3 সেকেন্ড হলে আপনি যদি 10 সেকেন্ডে ব্যবধানটি পুনরায় সেট করেন, সক্ষম করা সত্যটি সেট হয়ে যাওয়ার পরে 13 সেকেন্ডের মধ্যে প্রথমবারের মতো বিচ্ছিন্ন ইভেন্টটি উত্থাপিত হয়।

সুতরাং,

    const double TIMEOUT = 5000; // milliseconds

    aTimer = new System.Timers.Timer(TIMEOUT);
    aTimer.Start();     // timer start running

    :
    :

    aTimer.Interval = TIMEOUT;  // restart the timer

1
এখানে সমস্যা হ'ল টাইমার ইতিমধ্যে চলছে কিনা বা আপনি পুনরায় সেট করতে চান সেই মুহুর্তে আপনি সর্বদা জানেন না। সুতরাং, আপনাকে aTimer.Interval = TIMEOUT এবং একটি aTimer.Start () করতে হবে। সুতরাং সামগ্রিকভাবে, উপরে একটি রিসেট ফাংশন কম লাইন এবং ভেরিয়েবল ব্যবহার করে। দুর্দান্ত সংযোজন যদিও।
ই-মোটিভ

1
@ আরইউ-বিএন ওপিতে স্পষ্টভাবে " একটি। রিসেট () ফাংশনটি উল্লেখ করেছে যা বর্তমান অতিবাহিত সময়টিকে 0 এ পুনরায় সেট করবে " " - এটি উল্লেখ করে না যে এটি একটি দরিদ্র নকশাকৃত অ্যাপ্লিকেশনটি ব্যবহার করার উদ্দেশ্যে করা হয়েছে যেখানে আপনি এমনকি জানেন না যে টাইমারটি চলছে কিনা। এছাড়াও লেখকের মন্তব্যটি পরীক্ষা করুন (আরও 4 বছর আগে): " থিয়োরিটি হ'ল যে প্রথম পরিবর্তনটি এমন একটি টাইমার শুরু করে যা প্রতিটি পরিবর্তনের সাথে পুনরায় সেট হয়ে যায় যতক্ষণ না এটি শেষ পর্যন্ত গুলি চালায় এবং গোষ্ঠীটি বন্ধ করে দেয় " " যাইহোক, ডাউন ভোটের জন্য ধন্যবাদ।
এমমন্টু

আমিও এরকম একটি সমস্যা দেখেছি। আমি যা করেছি তা হল: aTimer.Interval = aTimer.Interval। এটি ট্রিগার করেছিল যে লুপটি চলছে। আমাকে মারছে তবে এটি কাজ করে ...
হারমান ভ্যান ডের ব্লম

7

আপনি রিসেট () নামে পরিচিত একটি এক্সটেনশন পদ্ধতি লিখতে পারেন, যা

  • টাইমার্স.টাইমার এবং ফর্মস.টাইমারের জন্য স্টপ () - স্টার্ট () কল করুন
  • থ্রেডিং-টাইমারের জন্য পরিবর্তন কল করে

5

আমি কেবল টাইমারকে একটি নতুন মান অর্পণ করেছি:

mytimer.Change(10000, 0); // reset to 10 seconds

এটা আমার জন্য ভালই কাজ করে.

কোডের শীর্ষে টাইমার সংজ্ঞায়িত করুন: System.Threading.Timer myTimer;

if (!active)
        {
            myTimer= new System.Threading.Timer(new TimerCallback(TimerProc));
        }
        myTimer.Change(10000, 0);
        active = true;

private void TimerProc(object state)
    {
        // The state object is the Timer object.
        System.Threading.Timer t = (System.Threading.Timer)state;
        t.Dispose();
        Console.WriteLine("The timer callback executes.");
        active = false;
        //action to do when timer is back to zero
    }

5

স্পষ্টতার জন্য যেহেতু কিছু অন্যান্য মন্তব্যগুলি ভুল, ঠিক System.Timersততক্ষণে সক্ষম সেটিংস ব্যবহার করার সময় অবিচ্ছিন্ন সময়টি পুনরায় সেট হবে । আমি কেবল নীচের সাথে আচরণটি পরীক্ষা করেছি:

Timer countDown= new Timer(3000);

Main()
{
    TextBox.TextDidChange += TextBox_TextDidChange;
    countdown.Elapsed += CountDown_Elapsed;
}

void TextBox_TextDidChange(Object sender, EventArgs e)
{
    countdown.Enabled = true;
}

void CountDown_Elapsed(object sender, EventArgs e)
{
    System.Console.WriteLine("Elapsed");
}

আমি বার বার পাঠ্য বাক্সে পাঠ্য ইনপুট করতাম এবং টাইমারটি শেষ কী-স্ট্রোকের পরে কেবল 3 সেকেন্ড চলত run এটি ডক্সেও রয়েছে যেমন আপনি দেখতে পাবেন: কল করা Timers.Start()সহজভাবে সক্ষমকে সত্য হিসাবে সেট করে।

এবং নিশ্চিত হওয়া, যা আমার প্রথম থেকেই সরাসরি যাওয়া উচিত ছিল, আপনি .NET রেফারেন্স উত্সে দেখতে পাবেন যে একটি ইতিমধ্যে সক্ষম টাইমার সক্ষম করা হলে এটি ব্যক্তিগত UpdateTimer()পদ্ধতিটিকে কল করে , যা অভ্যন্তরীণভাবে কল করে Change()


না তুমি ভুল করছ. ব্যক্তিগত UpdateTtimerমানটিকে যদি বলা হয় তবে যদি বর্তমান মানটি Enabledনতুনের সমান হয় না value
নিকোলো কারান্দিনি

3

একটি টাইমার জন্য (System.Windows. Forms.Timer)।

.Sop, তারপরে। স্টার্ট পদ্ধতিগুলি রিসেট হিসাবে কাজ করেছিল।


1

উইন্ডোজ.টিমার পুনরায় সেট করার অন্যান্য বিকল্প উপায় নীচের হিসাবে কাউন্টারটি ব্যবহার করছে:

int tmrCtr = 0;
Timer mTimer;

private void ResetTimer()
{
  tmrCtr = 0;
}

private void mTimer_Tick()
{
  tmrCtr++;
  //perform task
}  

সুতরাং আপনি যদি প্রতি 1 সেকেন্ডে পুনরাবৃত্তি করতে চান, আপনি টাইমার ব্যবধানটি 100 মিমি সেট করতে পারেন এবং 10 টি চক্রটিতে কাউন্টারটি পরীক্ষা করতে পারেন।

এটি উপযুক্ত যদি টাইমার কিছু প্রক্রিয়াগুলির জন্য অপেক্ষা করতে পারে যা বিভিন্ন সময়সীমার মধ্যে শেষ হতে পারে।


1

আমি এই কাজ

//Restart the timer
queueTimer.Enabled = true;

এটি কেবল এটি সক্ষম করে। এমনকি যদি এটি আগে থেকে অক্ষম করা হয়েছিল, পুনরায় সক্রিয়করণ সেই বিন্দুতে সংগৃহীত সময় কাটেনি changed
ভ্যাপকুই

আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.