c# - 2 个事件之间的时间延迟问题
问题描述
我的任务是制作反射计应用程序,并以 exe 为例。我让它工作了,但我没有从给出的示例和我的应用程序中得到相同的结果,就像我在某个地方丢失了 60-70 毫秒。应用程序应该在 0.5 到 5 秒之间的随机时间显示文本,当文本显示时,用户应该单击一个按钮,该按钮将停止我在这里使用的秒表类并将其写入最后和最佳时间。
首先,我将 TotalMilliseconds 、 seconds 、 milliseconds 和 minutes 保存为 double ,现在保存为 TimeSpan ,我觉得当我将它保存在 TimeSpan 中时,它减少了时间,但不足以作为示例应用程序甚至在线反射应用程序关闭。我在考虑事件之间的延迟,甚至是鼠标点击,但我认为它不应该是 50 60 毫秒。如果这是如何衡量这些的问题。
这些是开始事件
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);
}
这是按钮点击事件
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 的公共静态双变量
解决方案
使用MouseDown
Button 的事件而不是Click
事件。该Click
事件只会在用户按下控件上的鼠标按钮之后的某个时间触发,因为它首先等待用户也释放鼠标按钮,而且它还必须首先执行一些内部任务(重绘按钮、验证检查)。
代码的附加说明:
不要每次都创建 Random 类的新实例。一次创建一个实例并一直重复使用它。请参阅如何在 C# 中生成随机整数?
在 Timer Tick 功能中,只有在设置好定时器间隔后才能启动秒表。该按钮实际上只会在代码离开该功能并有机会再次处理 Windows 消息时才可见。
请给出o
一些m
有意义的名字。您不需要这两个变量。它们始终具有相同的值。你只需要其中之一。
在CLick_B_Click
,你不需要 if 在 else 部分。
在当前版本的代码中,当用户没有立即点击时,定时器点击事件可能会在用户点击按钮之前发生多次,过早重置秒表......
推荐阅读
- kubernetes - K8 使用大写镜像名称创建 pod
- java - 为什么Java中的最后一个地图元素不断重复
- python - filenotfound 错误 - chromedriver(网页抓取)
- python - 我们如何在python中使列表中的重复值唯一?
- c# - 如何在没有“if statement”的情况下检查 CheckBox 是否被选中?
- vue.js - 如何用 jest 测试 nuxt?
- coq - 如何使用 VST/coq 为 switch 语句编写证明?
- python - 如何根据另一个列名聚合熊猫中的文本
- reactjs - 如何使用 React 函数组件获取图像显示
- python - Django ValueError:字段 'id' 需要一个数字,但得到了 'myuser'