首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
MCP广场
社区首页 >问答首页 >两个事件之间的时间延迟问题

两个事件之间的时间延迟问题
EN

Stack Overflow用户
提问于 2018-12-28 21:30:21
回答 2查看 60关注 0票数 1

我有一个任务是制作反射仪应用程序,我得到了和exe作为一个例子。我让它工作了,但我没有得到相同的结果,我给我的例子和我的应用程序,这就像我有60-70毫秒迷失在什么地方。应用程序应该在0.5到5秒之间的任意时间显示文本,当文本显示时,用户应该单击一个按钮,该按钮将停止我在这里使用的秒表类,并将其写入最后和最佳时间。

一开始,我把TotalMilliseconds的秒数、毫秒数和分钟数都节省了一倍,现在我用TimeSpan保存,我觉得当我把它保存在TimeSpan中时,它减少了时间,但还不足以接近示例应用程序,甚至是在线反射应用程序。我在考虑事件之间的延迟,甚至鼠标点击,但我不认为它应该是50 - 60毫秒。如果这就是问题所在,那么如何衡量它们呢?

这些是启动事件

代码语言:javascript
复制
private void Start_B_Click(object sender, EventArgs e)
{
    Random rnd = new Random();

    RndTimer.Interval = rnd.Next(500, 5000);
    RndTimer.Start();
}
Stopwatch s = new Stopwatch();
private void RndTimer_Tick(object sender, EventArgs e)
{
    NOW_L.Visible = true;
    s.Reset();
    s.Start();
    Random rnd = new Random();
    RndTimer.Interval = rnd.Next(500, 5000);
}

这是按钮点击事件

代码语言:javascript
复制
public double o;
private void Click_B_Click(object sender, EventArgs e)
{
    if (NOW_L.Visible == true)
    {
        s.Stop();
        TimeSpan ts = s.Elapsed;
        NOW_L.Visible = false;

        if (LtimeRez_LB.Text == "00:00:00" || ts.TotalMilliseconds < class1.m)
        {
            LtimeRez_LB.Text = ts.Minutes.ToString() + ":" + ts.Seconds.ToString + ":" +
                               ts.Milliseconds.ToString();
            BesttimeRez_LB.Text = ts.Minutes.ToString() + ":" + ts.Seconds.ToString + ":" +
                                  ts.Milliseconds.ToString();
            class1.m = ts.TotalMilliseconds;
            o = class1.m;
        }
        else if (ts.TotalMilliseconds > o || ts.TotalMilliseconds == o)
        {
            LtimeRez_LB.Text = ts.Minutes.ToString() + ":" + ts.Seconds.ToString + ":" +
                               ts.Milliseconds.ToString();
        }
        NOW_L.Visible = false;
    }
}

LtimeRez变量是显示最后结果的标签,BestTimeRez是最佳时间结果,我还使用了名为m的公共静态双变量

EN

回答 2

Stack Overflow用户

回答已采纳

发布于 2018-12-28 21:52:13

我在这里看到的一个问题是代码中的字符串连接。在C#世界中,连接时应该使用String.Format()方法。使用加号运算符来连接字符串会增加延迟。所以使用下面这行来形成字符串-

代码语言:javascript
复制
LtimeRez_LB.Text = String.Format("{0}:{1}:{2}", ts.Minutes, ts.Seconds, ts.Milliseconds);  

~Nilesh

票数 -1
EN

Stack Overflow用户

发布于 2018-12-28 21:45:36

使用Button的MouseDown事件而不是Click事件。Click事件只会在用户按下控件上的鼠标按钮后一段时间触发,因为它首先要等待用户释放鼠标按钮,而且还必须首先执行一些内部任务(重画按钮、验证检查)。

有关代码的其他说明:

不要每次都创建Random类的新实例。只需创建一次实例,就可以一直重用它。请参阅How do I generate a random int number in C#?

在定时器滴答功能中,设置定时器间隔后才能启动秒表。实际上,只有当代码离开该函数并有机会再次处理Windows消息时,该按钮才会变得可见。

请给om起一些有意义的名字。您不需要同时使用两个变量。它们总是具有相同的值。你只需要其中一个。

CLick_B_Click中,您不需要在else部分中使用if。

在当前版本的代码中,当用户没有立即单击时,计时器单击事件可能会在用户单击按钮之前多次发生,过早地重新设置秒表...

票数 1
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/53959366

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档