저는 현재 많은 시간마다 여러 번 작업을 수행해야하는 C# 프로젝트에서 작업하고 있습니다.매우 많은 시간마다 여러 번 이벤트를 수행하십시오.
예를 들어 콘솔에 1 초마다 5 번 씁니다. 어떻게이 일을 할 수 있을까요?
도움을 주셔서 감사합니다.
저는 현재 많은 시간마다 여러 번 작업을 수행해야하는 C# 프로젝트에서 작업하고 있습니다.매우 많은 시간마다 여러 번 이벤트를 수행하십시오.
예를 들어 콘솔에 1 초마다 5 번 씁니다. 어떻게이 일을 할 수 있을까요?
도움을 주셔서 감사합니다.
는이
While (true)
{
for (int i=0; i<5; i++)
{
console ("Hello");
}
//this will pause for 1 sec (1000msec)
Thread.sleep(1000);
}
사용자 인터페이스 스레드에서 작업하는 경우 잠금 상태가되므로 좋지 않습니다. 또한, 만약 두 번째 작업의 1/5이 진행되지 않더라도 OP가 다른 작업을 원한다면 이것은 불가능할 것입니다. 타이머 또는 시간 계수 체크가 더 좋습니다. –
UI가 아닌 스레드에서도 프로덕션 환경에서 수행하면 안되며 어쨌든 타이머처럼 안정적으로 작동하지 않습니다. [More info here] (http://msmvps.com/blogs/peterritchie/archive/2007/04/26/thread-sleep-is-a-sign-of-a-poorly-designed-program.aspx) –
Timer
을 사용하고 Timer.Elapsed
이벤트에 바인드 및 이벤트를 사용할 수 있습니다.
using System.Timers;
샘플 코드 :
Timer timer = new Timer();
timer.Elapsed += (sender, eventArgs) =>
{
for (int i = 0; i < 5; i++)
{
Console.Write(i);
}
};
이는 콘솔 응용 프로그램입니다, 또는 당신은 다른 스레드에서이 작업을 실행합니까?
예제 코드에는 간격이 설정되어 있지 않으며 한 번에 다섯 번이 아니라 즉시 실행 행에 다섯 번 씁니다. –
나는이 질문을 초당 5 번 쓴다고 해석했다. 물론 타이머의 간격을 5 분의 1 초로 설정하고이 경우 해당 줄을 솔루션으로 작성할 수 있습니다. – Aphelion
@ dawmail333 간격 및 시작 호출이 누락되었음을 알았지 만 OP는 모든 x에 5 번 씁니다. –
이와 같은 짧은 내용의 경우 타이머를 사용하십시오.
그리고 :
전자는 ThreadPool
을 사용 후자는 UI 이벤트를 사용하여 선택할 수있는 두 가지 사람이있다. 둘 다 지정할 수있는 기능과 간격 및 콜백 메서드 또는 사용자 지정 코드를 적용하기 위해 연결할 이벤트를 노출합니다.
더 오랜 시간 동안 사용하지 않을 경우 Windows 스케줄러 (OS 1) 또는 Quartz.NET과 같은 스케줄링 프레임 워크를 사용하여 예약하십시오.
는 타이머의 정확도가 달라질 수 있습니다 말고 당신이 할 수 있도록 정말 마진 내에서 인간은,는 또한 스레드 타이머의 콜백이 임의의 ThreadPool
스레드에서 반환 않습니다 :-) 감지 할 수 실제로 실현하지 않고 코드를 "멀티 스레딩"하게 만듭니다.
System.Timers.Timer도 있으며 이벤트를 노출합니다. 이용 가능한 다른 타이머에 관한 기사 can be found here.
내가 당신에 영향을 미칠 것입니다 생각하지 않습니다 노력하지만, 여전히 아는 가치 - 창 리얼 타임 OS 아니다; X 밀리 초마다 수행 할 작업을 요청하면 정확하지 않을 것입니다. 얼마나 많은 작업을 수행 할 것인가는 다양한 작업에 달려 있습니다.
스레드를 만들어 실행할 수 있습니다. 많은 프로세싱을하고 싶다면 특히 유용합니다! 다음은 1 초 (1000ms)마다 작업을 수행하는 스레드의 예입니다.
public void Start()
{
running = true;
thread = new Thread(new ParameterizedThreadStart(ThreadFunction));
thread.Start();
}
public virtual void ThreadFunction(object o)
{
var insert = false;
while (running)
{
//Do work
Thread.Sleep(1000);
}
}
정확히 어떤 문제가 있습니까? 어떻게해야할지 모르십니까? – Oded
루프와 타이머가 가장 친한 친구입니다. –