ডাব্লুপিএফ টাইমার সি # টাইমারের মতো


177

ডাব্লুপিএফ-তে সি # টাইমার নিয়ন্ত্রণের মতো এমন একটি নিয়ন্ত্রণ কোথায় পাব?

উত্তর:


325

সাধারণ ডাব্লুপিএফ টাইমারটি হ'ল DispatcherTimer, যা কোনও নিয়ন্ত্রণ নয় তবে কোডে ব্যবহৃত হয়। এটি মূলত উইনফোর্ডস টাইমারের মতো একইভাবে কাজ করে:

System.Windows.Threading.DispatcherTimer dispatcherTimer = new System.Windows.Threading.DispatcherTimer();
dispatcherTimer.Tick += dispatcherTimer_Tick;
dispatcherTimer.Interval = new TimeSpan(0,0,1);
dispatcherTimer.Start();


private void dispatcherTimer_Tick(object sender, EventArgs e)
{
  // code goes here
}

ডিসপ্যাচারটাইমার সম্পর্কিত আরও এখানে পাওয়া যাবে


হাই, আমি প্রেরণ টাইমার ব্যবহার করার চেষ্টা করছি কিন্তু আমি এটি আমার ইন্টিলেসেন্সে খুঁজে পাচ্ছি না যে এটি ব্যবহার করার জন্য আমার জন্য কোনও রেফারেন্স যুক্ত করা দরকার?
yohannes

2
আপনি আমার মতামতটি মিলিসেকেন্ডের চেয়ে ভালভাবে অন্তর সেট করলেন like
জেএল।

আপনি যখন আপনার ফর্মটি বন্ধ করবেন তখন ডিসপ্যাচারটাইমারের স্টপ () কল করতে ভুলবেন না। টাইমারটির উইনফোর্ডস সংস্করণ স্বয়ংক্রিয়ভাবে তা করে। (এটি টাইমারকে একটি নিয়ন্ত্রণ করার সুবিধা)) আপনি যদি না থাকেন তবে আপনার মেমরি ফাঁস এবং সম্ভবত অন্যান্য বাগ রয়েছে।
ট্রেড-আইডিয়াস ফিলিপ

7
@ জেএল এহ? এই কোডটির ব্যাখ্যা করা অসম্ভব। আরও ভালvar timer = new DispatcherTimer { Interval = TimeSpan.FromSeconds(1) };
জিম বাল্টার

12

ডিসপ্যাচারের সাথে আপনাকে অন্তর্ভুক্ত করতে হবে

using System.Windows.Threading;

এছাড়াও মনে রাখবেন যে আপনি ডিসপ্যাচারটাইমারকে ডান-ক্লিক করুন এবং সমাধান করুন ক্লিক করলে এটি যথাযথ উল্লেখগুলি যুক্ত করা উচিত।


উইন্ডোজবেস.ডিল বিটিডব্লু
জর্জ বীরবিলিস

16
আইএমএইচও এটি কোন নিয়ন্ত্রণটি ব্যবহার করবেন সে প্রশ্নের উত্তর দেয় না, এটি কেবল স্বীকৃত উত্তরে কিছু মন্তব্য যুক্ত করে।
স্টিফেন কেনেডি

3
আমি এটি 2012 সালে যুক্ত করেছি, সত্যিই একজন বিকাশকারী হিসাবে শুরু করে, আমি এখনও এর জন্য পয়েন্ট পেয়েছি। তবে @ স্টেফেন কেনেডি যেমন উল্লেখ করেছেন, এটি একটি মন্তব্য হওয়া উচিত।
ম্যালাকর


0

টাইমার বিশেষ ফাংশন আছে।

  1. একটি অ্যাসিঙ্ক্রোনাস টাইমার বা সিঙ্ক্রোনাস টাইমারকে কল করুন।
  2. সময়ের ব্যবধান পরিবর্তন করুন
  3. বাতিল এবং পুনরায় চালু করার ক্ষমতা  

আপনি যদি ব্যবহার করেন StartAsync ()বা Start (), থ্রেডটি ব্যবহারকারী ইন্টারফেস উপাদানটিকে অবরুদ্ধ করে না

     namespace UITimer


     {
        using thread = System.Threading;
        public class Timer
        {

        public event Action<thread::SynchronizationContext> TaskAsyncTick;
        public event Action Tick;
        public event Action AsyncTick;
        public int Interval { get; set; } = 1;
        private bool canceled = false;
        private bool canceling = false;
        public async void Start()
        {
            while(true)
            {

                if (!canceled)
                {
                    if (!canceling)
                    {
                        await Task.Delay(Interval);
                        Tick.Invoke();
                    }
                }
                else
                {
                    canceled = false;
                    break;
                }
            }


        }
        public void Resume()
        {
            canceling = false;
        }
        public void Cancel()
        {
            canceling = true;
        }
        public async void StartAsyncTask(thread::SynchronizationContext 
        context)
        {

                while (true)
                {
                    if (!canceled)
                    {
                    if (!canceling)
                    {
                        await Task.Delay(Interval).ConfigureAwait(false);

                        TaskAsyncTick.Invoke(context);
                    }
                    }
                    else
                    {
                        canceled = false;
                        break;
                    }
                }

        }
        public void StartAsync()
        {
            thread::ThreadPool.QueueUserWorkItem((x) =>
            {
                while (true)
                {

                    if (!canceled)
                    {
                        if (!canceling)
                        {
                            thread::Thread.Sleep(Interval);

                    Application.Current.Dispatcher.Invoke(AsyncTick);
                        }
                    }
                    else
                    {
                        canceled = false;
                        break;
                    }
                }
            });
        }

        public void StartAsync(thread::SynchronizationContext context)
        {
            thread::ThreadPool.QueueUserWorkItem((x) =>
            {
                while(true)
                 {

                    if (!canceled)
                    {
                        if (!canceling)
                        {
                            thread::Thread.Sleep(Interval);
                            context.Post((xfail) => { AsyncTick.Invoke(); }, null);
                        }
                    }
                    else
                    {
                        canceled = false;
                        break;
                    }
                }
            });
        }
        public void Abort()
        {
            canceled = true;
        }
    }


     }

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