C# 检查像素颜色,直到我关闭程序
我发现这个代码:C# 检查像素颜色,直到我关闭程序,c#,winforms,loops,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();
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;
}
}
}
但我不想得到回报;,我想让它一直工作到我关闭程序。如果我删除该返回,程序将无法运行。它将启动一个infinte循环。我希望这个程序注意一个像素,然后如果它改变颜色,DoAction将激活一个宏。然后它将再次开始关注。我该怎么做呢?您可以使用Thread.Sleep,也可以使用计时器并添加一个间隔来完成您想要的操作。间隔以毫秒为单位
阅读以下帖子,决定什么最适合你:
尝试:
这将为您的方法创建一个线程。不要忘记添加Thread.Sleep1000或任何其他值,否则将创建一个忙循环
编辑:根据要求提供更完整的样本:
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);
}
}
});
}
什么是线,睡觉?它编译了吗?实际上没有。我刚刚删除了它。如果你不想返回;把它拿走!如果我删除该程序,该程序将无法运行。它将启动一个infinte循环。如果删除返回,程序将完全按照您描述的方式运行。它将接受颜色和位置,并对其进行监视,直到满足条件,然后调用DoAction,然后继续监视,直到再次满足条件。如果这不是你想要的,你需要更具体。它实际上解决了问题。。。想解释一下为什么不吗?如果他想让它一直运行到程序关闭,它需要在一个单独的线程中运行。OP的问题与线程无关。当然,您可以添加一个线程,以避免锁定UI线程,但是OP的问题与控制流有关,您还没有解决这个问题。你甚至还没有展示他们如何将TPL,正如你所建议的那样,整合到他们的代码中。我提供了一个更完整的例子。我是用定时器完成的,但我没有使用线程。睡眠,这是错的吗?
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);
}
}
});
}