반응형
WPF 타이머 컨트롤은 어디에 있습니까?
WPF의 C# 타이머 컨트롤과 같은 컨트롤은 어디에서 찾을 수 있습니까?
통상적인 WPF 타이머는DispatcherTimer
이것은 컨트롤이 아니라 코드에서 사용됩니다.기본적으로 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
}
DispatcherTimer에 대한 자세한 내용은 여기를 참조하십시오.
디스패처에서는 다음을 포함해야 합니다.
using System.Windows.Threading;
또한 DispatcherTimer를 마우스 오른쪽 버튼으로 클릭하고 Resolve를 클릭하면 적절한 참조가 추가됩니다.
를 사용할 수도 있습니다.
using System.Timers;
using System.Threading;
타이머에는 특별한 기능이 있습니다.
- 비동기 타이머 또는 동기 타이머를 호출합니다.
- 시간 간격 변경
- 취소하고 재개할 수 있는 기능
사용한다면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;
}
}
}
언급URL : https://stackoverflow.com/questions/5410430/where-is-the-wpf-timer-control
반응형
'programing' 카테고리의 다른 글
WPF의 MVVM 프로젝트 구조 (0) | 2023.04.11 |
---|---|
VBA에서 다음 줄의 코드를 계속하는 방법 (0) | 2023.04.11 |
NSView의 배경색을 변경하는 가장 좋은 방법 (0) | 2023.04.11 |
bash 스텝n을 사용하여 범위를 작성하려면 어떻게 해야 합니까?(증분으로 일련의 숫자를 생성합니다.) (0) | 2023.04.11 |
Git 푸시 오류: 리포지토리를 찾을 수 없습니다. (0) | 2023.04.11 |