Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/258.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 如何检查类属性,以便在它';让我们得到价值_C#_Winforms - Fatal编程技术网

C# 如何检查类属性,以便在它';让我们得到价值

C# 如何检查类属性,以便在它';让我们得到价值,c#,winforms,C#,Winforms,我有一个winform应用程序,可以读取文件、更改、重命名等。 每次状态更改(更改、重命名、工作…等)时,状态都会显示在相应的标签中,有时需要处理的下一个文件会延迟几秒,当发生时,我希望计时器倒计时,显示直到下一个文件出现的时间。 在main类中,我有一个属性(键入double),它接收下一个文件将出现的时间(以秒为单位)。 如果间隔超过5秒,我希望计时器启动。 当它发生时,属性将获得秒数,计时器应读取此双精度值并倒计时。 我怎样才能一直检查这个变量,当他得到一个合适的值时,计时器就会启动 以下

我有一个winform应用程序,可以读取文件、更改、重命名等。
每次状态更改(更改、重命名、工作…等)时,状态都会显示在相应的标签中,有时需要处理的下一个文件会延迟几秒,当发生时,我希望计时器倒计时,显示直到下一个文件出现的时间。
在main类中,我有一个属性(键入double),它接收下一个文件将出现的时间(以秒为单位)。 如果间隔超过5秒,我希望计时器启动。
当它发生时,属性将获得秒数,计时器应读取此双精度值并倒计时。
我怎样才能一直检查这个变量,当他得到一个合适的值时,计时器就会启动

以下是我的课程如何获得延迟时间:

public class Delay
{   
    public event EventHandler _largeWait;

    public Delay(int numberOfSeconds)
    {
        _numberOfSeconds = numberOfSeconds;
    }

    public double _delayTime;

    public double _packetDelay
    {
        get { return _packetDelay; }

        set
        {
            _packetDelay = value;

            if (value > 5 && _largeWait != null)
            {
                _largeWait(this, EventArgs.Empty);
            }
        }
    }
}
然后在我创建延迟实例的地方:(在将值插入延迟变量之后)


这里的问题是,这变成了递归,我不知道为什么你可以实现一个setter而不是缩写形式,如果>5s,就启动计时器:

public class Delay
{
    public event EventHandler LargeWait;

    private double numberOfSeconds;
    public double NumberOfSeconds
    {
        get { return numberOfSeconds; }
        set
        {
            numberOfSeconds = value;
            if(value > 5 && LargeWait != null)
                LargeWait(this, EventArgs.Empty);
        }
    }

    public Delay(int numberOfSeconds)
    {
        this.numberOfSeconds = numberOfSeconds;
    }
}
然后在创建
Delay
实例的位置:

Delay delay = new Delay(sec);
delay.LargeWait += (s, e) => {
    timer.Tag = s; //s is the Delay instance
    timer.Start();
};

您可以实现一个setter,而不是缩写形式,并在>5s时启动计时器:

public class Delay
{
    public event EventHandler LargeWait;

    private double numberOfSeconds;
    public double NumberOfSeconds
    {
        get { return numberOfSeconds; }
        set
        {
            numberOfSeconds = value;
            if(value > 5 && LargeWait != null)
                LargeWait(this, EventArgs.Empty);
        }
    }

    public Delay(int numberOfSeconds)
    {
        this.numberOfSeconds = numberOfSeconds;
    }
}
然后在创建
Delay
实例的位置:

Delay delay = new Delay(sec);
delay.LargeWait += (s, e) => {
    timer.Tag = s; //s is the Delay instance
    timer.Start();
};

但是从类定义的位置,我无法到达时间,然后你可以传入引用或抛出你处理的事件,在可以到达的位置…谢谢,但是从主GUI线程,我可以检查延迟。numberOfSeconds,然后启动计时器?可能与通知延迟时间的代表一起。numberOfSeconds!=null?是否在某个位置(GUI线程中)创建延迟实例您在哪里可以访问计时器?让我们看看,但是从类定义的地方我无法到达计时器,然后您可以传入引用或在可以到达的地方抛出您处理的事件…谢谢,但是从主GUI线程我可以检查延迟。秒数,然后启动计时器?可能与通知延迟时间的代表一起。numberOfSeconds!=null?您是否在可以访问计时器的位置(GUI线程中)创建延迟实例?让我们看看您的递归位于
\u packetDelay
getter。应该是
return\u delayTime。顺便说一句:以下划线开始公共成员是一种糟糕的风格。“Pascal case”是这里常用的样式。您的递归位于
\u packetDelay
getter。应该是
return\u delayTime。顺便说一句:以下划线开始公共成员是一种糟糕的风格。“帕斯卡案例”是那里常用的文体。