Timer WPF Seperti Timer C #

177

Di mana saya dapat menemukan kontrol yang seperti Kontrol Timer C # di WPF?

cetin
sumber

Jawaban:

325

Timer WPF biasa adalah DispatcherTimer, yang bukan merupakan kontrol tetapi digunakan dalam kode. Ini pada dasarnya bekerja dengan cara yang sama seperti timer WinForms:

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
}

Lebih lanjut tentang DispatcherTimer dapat ditemukan di sini

Gimno
sumber
Hai, saya sudah mencoba menggunakan timer pengiriman tetapi saya tidak dapat menemukannya di intelisense saya apakah ada referensi yang perlu ditambahkan agar saya dapat menggunakannya?
yohannes
2
Saya suka cara Anda mengatur interval, lebih baik daripada milidetik menurut saya.
JL.
Pastikan untuk memanggil dispatcherTimer.Stop () saat Anda menutup formulir Anda. Versi WinForms dari timer melakukan itu secara otomatis. (Itulah keuntungan menjadikan pengatur waktu sebagai Kontrol.) Jika tidak, Anda akan mengalami kebocoran memori dan kemungkinan bug lainnya.
Ide Dagang Philip
7
@ JS Eh? Kode itu tidak mungkin untuk ditafsirkan. Jauh lebih baik adalahvar timer = new DispatcherTimer { Interval = TimeSpan.FromSeconds(1) };
Jim Balter
12

Dengan Dispatcher Anda harus memasukkan

using System.Windows.Threading;

Juga perhatikan bahwa jika Anda mengklik kanan DispatcherTimer dan mengklik Menyelesaikan itu harus menambahkan referensi yang sesuai.

Malcor
sumber
perlu menambahkan referensi ke WindowsBase.dll btw
George Birbilis
16
IMHO ini tidak menjawab pertanyaan tentang kontrol mana yang digunakan, itu hanya menambahkan beberapa komentar untuk jawaban yang diterima.
Stephen Kennedy
3
Saya menambahkan ini pada 2012, hanya benar-benar mulai sebagai pengembang, saya masih mendapatkan poin untuk itu. Tetapi seperti yang ditunjukkan oleh @StephenKennedy, ini harus menjadi komentar.
Malcor
3

Anda juga bisa menggunakan

using System.Timers;
using System.Threading;
Pavan R Bhupalam
sumber
0

Timer memiliki fungsi khusus.

  1. Panggil timer tidak sinkron atau timer sinkron.
  2. Ubah interval waktu
  3. Kemampuan untuk membatalkan dan melanjutkan  

jika Anda menggunakan StartAsync ()atau Start (), utas tidak memblokir elemen antarmuka pengguna

     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;
        }
    }


     }
Tn. Ds262 Pro
sumber
Bisakah Anda menjelaskan kode Anda? Jika Anda hanya memposting beberapa kode, orang tidak akan belajar darinya dan hanya menyalin & menempelkan beberapa kode dari web.
Robert