CheckPixelColor по теме - PullRequest
       2

CheckPixelColor по теме

1 голос
/ 20 января 2011

У меня есть функция, которая проверяет цвет в указанных позициях (используя GetPixel из winapi) в течение очень короткого периода времени (50 мс). Прямо сейчас я использую таймер в форме для вызова этой функции каждые 50 мс, но мое приложение зависает как ад.

Как мне сделать это в отдельном потоке, который повторяется до бесконечности, чтобы не заморозить пользовательский интерфейс?

Ответы [ 3 ]

4 голосов
/ 20 января 2011

Я бы порекомендовал заняться проблемой перфорирования, прежде чем выдавать нить канона. 50 миллисекунд это долгое время. Этот пример кода не влиял на интерактивность и не отражался на загрузке процессора, даже если он не оптимизирован:

    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());
            }
        }
    }
0 голосов
/ 20 января 2011

Используйте Background Worker и используйте таймер для вызова backgroundworker.runasync () ;.http://msdn.microsoft.com/en-us/library/system.componentmodel.backgroundworker.aspx

0 голосов
/ 20 января 2011

Поскольку пользовательский интерфейс является STA-потоком, вы не можете получить к нему доступ, кроме того, который его создал. Или вы можете использовать "Control.Invoke", но в этом случае он запускается в циклах сообщений, поэтому я думаю, что вы также испытаете некоторую задержку.

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...