Warning: file_get_contents(/data/phpspider/zhask/data//catemap/9/csharp-4.0/2.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# 测量keydown和keyup事件之间的时间_C#_C# 4.0 - Fatal编程技术网

C# 测量keydown和keyup事件之间的时间

C# 测量keydown和keyup事件之间的时间,c#,c#-4.0,C#,C# 4.0,我试图捕获KeyDown和keydup之间的计时(以毫秒为单位),这两个事件之间为每个键入的字符花费的时间,我使用了Stopwatch.GetTimestamp(),因为我需要获取高分辨率的时间戳,如下面的编码所示,我想知道这是否是以毫秒为单位计算时间的正确公式: int timestampinmilisons=Convert.ToInt32(elapsedTicks*1000000/秒表频率)用于以毫秒为单位获取时间 因为计时结果没有显示任何一致性,并且在这两个事件之间可能达到5秒,这是不现实

我试图捕获
KeyDown
keydup
之间的计时(以毫秒为单位),这两个事件之间为每个键入的字符花费的时间,我使用了
Stopwatch.GetTimestamp()
,因为我需要获取高分辨率的时间戳,如下面的编码所示,我想知道这是否是以毫秒为单位计算时间的正确公式:

int timestampinmilisons=Convert.ToInt32(elapsedTicks*1000000/秒表频率)用于以毫秒为单位获取时间

因为计时结果没有显示任何一致性,并且在这两个事件之间可能达到5秒,这是不现实的

public partial class Form1 : Form
{
    long timeStamp;
    long initialTimeStamp;


    public Form1()
    {

        InitializeComponent();
        Stopwatch stopWatch = new Stopwatch();
         // Uses the second Core or Processor for the Test
        // Prevents "Normal" processes from interrupting Threads
        // Prevents "Normal" Threads  
        initialize();

    }

    public void initialize()
    {
        //
    }

    public void textBox1_KeyDown(object sender, KeyEventArgs e)
    {

        initialTimeStamp = Stopwatch.GetTimestamp();
    }

    public void textBox1_KeyUp(object sender, KeyEventArgs e)
    {
        timeStamp = Stopwatch.GetTimestamp();

        long elapsedTicks = timeStamp  -initialTimeStamp;

        int timeStampInMiliseconds = Convert.ToInt32(elapsedTicks * 1000000 / Stopwatch.Frequency);
    }
}

非常感谢你的帮助

更好的方法是使用
StopWatch.elapsedmillesons
属性

文本框1\u KeyDown
事件处理程序中,只需按如下方式重新启动秒表:

stopWatch.Restart();
long timeStampInMiliseconds = stopWatch.ElapsedMilliseconds;
public partial class Form1 : Form
{
    long timeStamp;
    long initialTimeStamp;
    Stopwatch stopWatch;

    public Form1()
    {

        InitializeComponent();
        stopWatch = new Stopwatch();

        ....

    }
    ....
}
textBox1\u KeyUp
事件处理程序中,像这样读取
elapsedmillesons
属性:

stopWatch.Restart();
long timeStampInMiliseconds = stopWatch.ElapsedMilliseconds;
public partial class Form1 : Form
{
    long timeStamp;
    long initialTimeStamp;
    Stopwatch stopWatch;

    public Form1()
    {

        InitializeComponent();
        stopWatch = new Stopwatch();

        ....

    }
    ....
}
您还需要将
秒表
设置为如下实例变量:

stopWatch.Restart();
long timeStampInMiliseconds = stopWatch.ElapsedMilliseconds;
public partial class Form1 : Form
{
    long timeStamp;
    long initialTimeStamp;
    Stopwatch stopWatch;

    public Form1()
    {

        InitializeComponent();
        stopWatch = new Stopwatch();

        ....

    }
    ....
}

更好的方法是使用
StopWatch.elapsedmillesons
属性

文本框1\u KeyDown
事件处理程序中,只需按如下方式重新启动秒表:

stopWatch.Restart();
long timeStampInMiliseconds = stopWatch.ElapsedMilliseconds;
public partial class Form1 : Form
{
    long timeStamp;
    long initialTimeStamp;
    Stopwatch stopWatch;

    public Form1()
    {

        InitializeComponent();
        stopWatch = new Stopwatch();

        ....

    }
    ....
}
textBox1\u KeyUp
事件处理程序中,像这样读取
elapsedmillesons
属性:

stopWatch.Restart();
long timeStampInMiliseconds = stopWatch.ElapsedMilliseconds;
public partial class Form1 : Form
{
    long timeStamp;
    long initialTimeStamp;
    Stopwatch stopWatch;

    public Form1()
    {

        InitializeComponent();
        stopWatch = new Stopwatch();

        ....

    }
    ....
}
您还需要将
秒表
设置为如下实例变量:

stopWatch.Restart();
long timeStampInMiliseconds = stopWatch.ElapsedMilliseconds;
public partial class Form1 : Form
{
    long timeStamp;
    long initialTimeStamp;
    Stopwatch stopWatch;

    public Form1()
    {

        InitializeComponent();
        stopWatch = new Stopwatch();

        ....

    }
    ....
}

更好的方法是使用
StopWatch.elapsedmillesons
属性

文本框1\u KeyDown
事件处理程序中,只需按如下方式重新启动秒表:

stopWatch.Restart();
long timeStampInMiliseconds = stopWatch.ElapsedMilliseconds;
public partial class Form1 : Form
{
    long timeStamp;
    long initialTimeStamp;
    Stopwatch stopWatch;

    public Form1()
    {

        InitializeComponent();
        stopWatch = new Stopwatch();

        ....

    }
    ....
}
textBox1\u KeyUp
事件处理程序中,像这样读取
elapsedmillesons
属性:

stopWatch.Restart();
long timeStampInMiliseconds = stopWatch.ElapsedMilliseconds;
public partial class Form1 : Form
{
    long timeStamp;
    long initialTimeStamp;
    Stopwatch stopWatch;

    public Form1()
    {

        InitializeComponent();
        stopWatch = new Stopwatch();

        ....

    }
    ....
}
您还需要将
秒表
设置为如下实例变量:

stopWatch.Restart();
long timeStampInMiliseconds = stopWatch.ElapsedMilliseconds;
public partial class Form1 : Form
{
    long timeStamp;
    long initialTimeStamp;
    Stopwatch stopWatch;

    public Form1()
    {

        InitializeComponent();
        stopWatch = new Stopwatch();

        ....

    }
    ....
}

更好的方法是使用
StopWatch.elapsedmillesons
属性

文本框1\u KeyDown
事件处理程序中,只需按如下方式重新启动秒表:

stopWatch.Restart();
long timeStampInMiliseconds = stopWatch.ElapsedMilliseconds;
public partial class Form1 : Form
{
    long timeStamp;
    long initialTimeStamp;
    Stopwatch stopWatch;

    public Form1()
    {

        InitializeComponent();
        stopWatch = new Stopwatch();

        ....

    }
    ....
}
textBox1\u KeyUp
事件处理程序中,像这样读取
elapsedmillesons
属性:

stopWatch.Restart();
long timeStampInMiliseconds = stopWatch.ElapsedMilliseconds;
public partial class Form1 : Form
{
    long timeStamp;
    long initialTimeStamp;
    Stopwatch stopWatch;

    public Form1()
    {

        InitializeComponent();
        stopWatch = new Stopwatch();

        ....

    }
    ....
}
您还需要将
秒表
设置为如下实例变量:

stopWatch.Restart();
long timeStampInMiliseconds = stopWatch.ElapsedMilliseconds;
public partial class Form1 : Form
{
    long timeStamp;
    long initialTimeStamp;
    Stopwatch stopWatch;

    public Form1()
    {

        InitializeComponent();
        stopWatch = new Stopwatch();

        ....

    }
    ....
}

您不需要使用
秒表
。使用以下方法获取时间戳要容易得多:

long t = DateTime.Now.Ticks;
试试这个:

public void textBox1_KeyDown(object sender, KeyEventArgs e)
{
    initialTimeStamp = DateTime.Now.Ticks;
}

public void textBox1_KeyUp(object sender, KeyEventArgs e)
{
    timeStamp = DateTime.Now.Ticks;

    long elapsedTicks = timeStamp - initialTimeStamp;

    long timeStampInNanoseconds = elapsedTicks * 100;
}
为了获得更高的精度,我以纳秒为单位,但如果您愿意,可以将其转换为毫秒:

long timeStampInMiliseconds = elapsedTicks / 10000;

您不需要使用
秒表
。使用以下方法获取时间戳要容易得多:

long t = DateTime.Now.Ticks;
试试这个:

public void textBox1_KeyDown(object sender, KeyEventArgs e)
{
    initialTimeStamp = DateTime.Now.Ticks;
}

public void textBox1_KeyUp(object sender, KeyEventArgs e)
{
    timeStamp = DateTime.Now.Ticks;

    long elapsedTicks = timeStamp - initialTimeStamp;

    long timeStampInNanoseconds = elapsedTicks * 100;
}
为了获得更高的精度,我以纳秒为单位,但如果您愿意,可以将其转换为毫秒:

long timeStampInMiliseconds = elapsedTicks / 10000;

您不需要使用
秒表
。使用以下方法获取时间戳要容易得多:

long t = DateTime.Now.Ticks;
试试这个:

public void textBox1_KeyDown(object sender, KeyEventArgs e)
{
    initialTimeStamp = DateTime.Now.Ticks;
}

public void textBox1_KeyUp(object sender, KeyEventArgs e)
{
    timeStamp = DateTime.Now.Ticks;

    long elapsedTicks = timeStamp - initialTimeStamp;

    long timeStampInNanoseconds = elapsedTicks * 100;
}
为了获得更高的精度,我以纳秒为单位,但如果您愿意,可以将其转换为毫秒:

long timeStampInMiliseconds = elapsedTicks / 10000;

您不需要使用
秒表
。使用以下方法获取时间戳要容易得多:

long t = DateTime.Now.Ticks;
试试这个:

public void textBox1_KeyDown(object sender, KeyEventArgs e)
{
    initialTimeStamp = DateTime.Now.Ticks;
}

public void textBox1_KeyUp(object sender, KeyEventArgs e)
{
    timeStamp = DateTime.Now.Ticks;

    long elapsedTicks = timeStamp - initialTimeStamp;

    long timeStampInNanoseconds = elapsedTicks * 100;
}
为了获得更高的精度,我以纳秒为单位,但如果您愿意,可以将其转换为毫秒:

long timeStampInMiliseconds = elapsedTicks / 10000;

请记住,同时按下两个键或使用修改器键将破坏此功能。例如,按住Control键,然后按另一个键,然后松开Control键。除了caesay的注释之外,调试会使结果更加有趣,因为如果您单步执行代码,您会得到可能会有巨大延迟的事件。@caesay@Alexei Levenkov:谢谢您的回答,您能为错误提出解决方案吗。thanks@Zaid很难从样品中看出你到底想做什么,也很难看出什么测量实际上失败了。当前代码应该测量两个最近的向下/向上对之间的间隔,但据我所知,同一个键不需要。当你得到“事件间隔5秒”时,找出并更新带有案例的帖子,可能需要有人提供答案。(你也可以考虑问一个单独的问题,比如“当你发现的精确条件{下/升事件间隔5秒”)。记住,同时按下两个键,或者使用一个修改键将打破这个问题。例如,按住Control键,然后按另一个键,然后松开Control键。除了caesay的注释之外,调试会使结果更加有趣,因为如果您单步执行代码,您会得到可能会有巨大延迟的事件。@caesay@Alexei Levenkov:谢谢您的回答,您能为错误提出解决方案吗。thanks@Zaid很难从样品中看出你到底想做什么,也很难看出什么测量实际上失败了。当前代码应该测量两个最近的向下/向上对之间的间隔,但据我所知,同一个键不需要。当你得到“事件间隔5秒”时,找出并更新带有案例的帖子,可能需要有人提供答案。(你也可以考虑问一个单独的问题,比如“当你发现的精确条件{下/升事件间隔5秒”)。记住,同时按下两个键,或者使用一个修改键将打破这个问题。例如,按住Control键,然后按另一个键,然后松开Control键。除了caesay的注释之外,调试会使结果更加有趣,因为如果您单步执行代码,您会得到可能会有巨大延迟的事件。@caesay@Alexei Levenkov:谢谢您的回答,您能为错误提出解决方案吗。thanks@Zaid很难从样品中看出你到底想做什么,也很难看出什么测量实际上失败了。当前代码应该测量两个最近的向下/向上对之间的间隔,但据我所知,同一个键不需要。当你得到“事件间隔5秒”时,找出并更新带有案例的帖子,可能需要有人提供答案。(也可以考虑问单独的问题。