C# 循环检测到指定值后,反复执行的问题。

我需要检测一个目标程序的一个颜色点的值,当这个值为我指定的值时,执行一次某方法。但这个点的颜色会保持很久,而且我还需要循环检测
比如:
private void timer1_Tick(object sender, EventArgs e)
{
Clorer = GetPixelColor(165, 23);
if (clorer==3355443)
{
MessageBox.Show("出现指定值!");

}
}
这种情况,这个点的值只要不变,就会一直弹消息框。如果我把Timer停止了,又无法继续检测这个点的值了。
如何才能满足条件时,只执行一次,并且,继续检测这个点的值,下次出现时,再执行一次。
只要能一直检测并只执行一次,不用Timer也行。
希望大神们能看明白。

int preclorer = 0;
private void timer1_Tick(object sender, EventArgs e)
{
clorer = GetPixelColor(165, 23);
if (clorer==3355443 && preclorer != clorer)
{
MessageBox.Show("出现指定值!");
preclorer = clorer;
}
}

这样的话,第一次应该是可行的,因为preclorer != clorer,下次 检测时,preclorer = clorer,就不满足条件了,不会再执行了。

题目的需求可以归纳如下:

连续 检测到期望值,只弹出一次对话框。

那么关键就是如何判断 连续

可以用如下代码:

                int i = 1;
        int j = -1;
        private void timer1_Tick(object sender, EventArgs e)
        {
            Clorer = GetPixelColor(165, 23);

            i = i + 1;

            if (clorer == 3355443 && (i - j) != 1)  
            {
                MessageBox.Show("出现指定值!");
                j = i;
            }
        }

当 i-j 等于 1 时,就认定是 连续

int isMsgPopUp = 0;
private void timer1_Tick(object sender, EventArgs e)
{
clorer = GetPixelColor(165, 23);
if (clorer==3355443 && isMsgPopUp==0)
{
MessageBox.Show("出现指定值!");
isMsgPopUp= 1;
}
else
        isMsgPopUp=0;
}

加个开关。MessageBox.Show方法会阻塞当前线程,只要不点,开关就是true 状态。

bool dialog = false;
private void timer1_Tick(object sender, EventArgs e)
{
clorer = GetPixelColor(165, 23);
if (clorer==3355443 && !dialog)
{
dialog = true;
MessageBox.Show("出现指定值!");
dialog = false;
}
}

if (clorer==3355443 )
{
if global=0 {
MessageBox.Show("出现指定值!");
global=1;
}
}
else
{
global=0;
}

int a=0; //定义一个变量,表示“符合条件”出现了。
private void timer1_Tick(object sender, EventArgs e)
{
Clorer = GetPixelColor(165, 23);
if (clorer==3355443&&a==0)
{
a++;
MessageBox.Show("出现指定值!");
}
else
{
if(clorer!=3355443)
{
a=0;
}
}
}

不知是否是你所要