매우 짧은 시간 (50ms) 동안 지정된 위치 (winapi의 GetPixel 사용)에서 색상을 확인하는 기능이 있습니다. 지금은 폼에서 타이머를 사용하여 50ms마다 해당 함수를 호출하지만 내 응용 프로그램은 지옥처럼 얼어 버립니다.스레드의 CheckPixelColor
사용자 인터페이스가 고정되지 않도록 무한대 반복되는 별도의 스레드에서 어떻게 만들 수 있습니까?
매우 짧은 시간 (50ms) 동안 지정된 위치 (winapi의 GetPixel 사용)에서 색상을 확인하는 기능이 있습니다. 지금은 폼에서 타이머를 사용하여 50ms마다 해당 함수를 호출하지만 내 응용 프로그램은 지옥처럼 얼어 버립니다.스레드의 CheckPixelColor
사용자 인터페이스가 고정되지 않도록 무한대 반복되는 별도의 스레드에서 어떻게 만들 수 있습니까?
UI는 STA 스레드이므로 생성 한 스레드와 다른 스레드에서 액세스 할 수 없습니다. 또는 "Control.Invoke
"을 사용하여 할 수 있지만이 경우 메시지 루프에서 실행되므로 일부 지연이 발생할 수 있습니다.
스레드 캐논을 가져 오기 전에 perf 문제를 해결하는 것이 좋습니다. 50 밀리 초는 시간입니다. 이 샘플 코드는 최적화되지 않은 경우에도, 상호 작용에 영향을 미치지 아니하거나 CPU 부하에 글을 만든 :
Random rand = new Random();
private void timer1_Tick(object sender, EventArgs e) {
using (var bmp = new Bitmap(1, 1)) {
using (var gr = Graphics.FromImage(bmp)) {
gr.CopyFromScreen(rand.Next(800), rand.Next(600), 0, 0, new Size(1, 1));
Console.WriteLine(bmp.GetPixel(0, 0).ToString());
}
}
}
가 배경 노동자를 사용하여) (backgroundworker.runasync 전화 타이머를 사용 ;. http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.aspx