检查像素颜色,直到我关闭程序

时间:2015-05-02 05:16:08

标签: c# winforms loops

我找到了这段代码:

private void PollPixel(Point location, Color color)
{
    while(true)
    {
        var c = GetColorAt(location);

        if (c.R == color.R && c.G == color.G && c.B == color.B)
        {
            DoAction();
            return;
        }
    }
}

但是我不想要那个return();,我希望它能够工作直到我关闭程序。如果我删除该返回,该程序将无法正常工作。它将启动一个infinte循环。我希望这个程序注意一个像素,然后如果它改变了颜色,DoAction将激活一个宏。然后它会再次开始关注。我怎么能这样做?

2 个答案:

答案 0 :(得分:0)

您可以使用Thread.Sleep或使用Timer并添加间隔以执行您想要的操作。间隔以毫秒为单位。

阅读以下帖子并确定最适合您的内容:

  1. Compare using Thread.Sleep and Timer for delayed execution
  2. C# Timer or Thread.Sleep

答案 1 :(得分:0)

尝试:

Task.Factory.StartNew( () => {
// your code here
});

这将为您的方法创建一个线程。不要忘记添加Thread.Sleep(1000)(或任何其他值),否则您将创建一个繁忙的循环。

编辑:根据要求提供更完整的样本:

private bool run = true; //set this to false when your program closes
private void StartPollPixel(Point location, Color color)
{
    Task.Factory.StartNew( () => {

       while( run )
       {
           var c = GetColorAt(location);

           if (c.R == color.R && c.G == color.G && c.B == color.B)
           {
               DoAction(); //if you manipulate the UI do not forget to Invoke()
               Thread.Sleep(1000);
           }
       }

    });

}