C#Forms.Timer为公共字符串/布尔值/整数使用了不正确的值

时间:2018-07-24 20:16:13

标签: c# timer

程序说明:我正在编写一个使用计时器的程序,该计时器将连续监视屏幕以查看某个字符串是否已更改。如果有,它将把该字符串存储在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.)为什么滴答动作无法看到任何数据类型中的新近更新的值,无论是表单控件,整数,布尔值,字符串等...

0 个答案:

没有答案