程序说明:我正在编写一个使用计时器的程序,该计时器将连续监视屏幕以查看某个字符串是否已更改。如果有,它将把该字符串存储在treeView中并运行一组特定的函数。然后它将使用treeView中列出的字符串作为“先前的交易”,并且如果屏幕中列出了新的字符串,它将了解我们正在进行新的交易并重复特定的功能。
问题:计时器的.Tick函数似乎没有看到程序中任何内容的实时值/文本属性。首先,不从程序初始化时设置的初始默认值中读取treeView节点的更新值。现在由于某种原因,计时器正在运行多次(尽管它是System.Forms.Timer)并导致重叠。计时器的第一次迭代在更新后看不到节点值,但随后的节点却能正确执行。
因此,我尝试创建一个公共布尔来使用,我尝试停止计时器(这会终止整个.Tick函数),但是没有运气。计时器功能根本无法识别它们的更新值。只是程序开头的值。
我无法真正发布代码,因为它处于安全的Citrix环境中,因此我无法导出,但这基本上是这样的:
进行编辑以提高准确性
public partial class MainForm : Form
{
public System.Windows.Forms.Timer _screenWatch = new System.Windows.Forms.Timer();
public MainForm()
{
_screenWatch.Interval = 5000;
_screenWatch.Tick += (sender, e) => CheckSplashScreen(sender, e);
_screenWatch.Enabled = true;
}
void CheckSplashScreen(object sender, EventArgs e)
{
string currentClaim = treeView1.Nodes[0].Nodes[0].Text)
Console.WriteLine(currentClaim);
if (currentClaim != System.GetText(x,y,l))
{
GetNewClaim();
}
}
}
MessageBox.Show(currentClaim);
将显示默认的Node[0].Text
,就像在第一次定时迭代中启动应用程序时一样。随着计时器的继续,它将以相同的默认值开始另一个迭代,但是,自发地在前面立即弹出另一个消息框,并显示正确的Node[0].Text
值。
几乎就像有两个计时器在同时运行,一个总是错误,而另一个是正确的。
所以我想我的问题是(1))如何确保计时器的滴答动作在上一个完全完成之前不会发生。 2.)为什么滴答动作无法看到任何数据类型中的新近更新的值,无论是表单控件,整数,布尔值,字符串等...