当前位置:  开发笔记 > 编程语言 > 正文

一次读取随机字符长度

如何解决《一次读取随机字符长度》经验,为你挑选了1个好方法。

我试图在控制台应用程序上一次读取一系列输入的字符:

  while(true)
  {     
    var input= string.Empty;
    do
    {
        var key = Console.ReadKey();    
        input += key.KeyChar;              
    }
    while (input.Length <= 5);

    //do something with input.
  }

由于没有回车,我可以通过为输入设置固定长度来完成这项工作.但实际上我不知道一次会输入多少个字符......它可能是1到10之间的任何地方.无论如何修改上面的代码以便应用程序可以接收一次输入的内容吗?唯一分隔不同输入的是时间(可以假设至少2或3秒),因为没有回车.



1> Matt Burland..:

因此,我认为使用超时来判断用户是否已完成,这是一个可怕的想法,您可以通过以下方式实现:

var input = string.Empty;
var lockObj = new Object();
System.Threading.Timer timer = new System.Threading.Timer(o =>
{
    string localInput;
    lock(lockObj)
    {
        localInput = input;
        input = string.Empty;
    }
    Console.WriteLine("\noutput: {0}", localInput);

}, null, System.Threading.Timeout.Infinite, System.Threading.Timeout.Infinite);   
while (true)
{
    var key = Console.ReadKey();
    timer.Change(2000, System.Threading.Timeout.Infinite);
    lock(lockObj)
    {
        input += key.KeyChar;
    }
}

当按下一个键并且当该计时器到期时(假设它没有被另一个按键取消),你启动一个计时器(取消任何前一个计时器),你可以使用当前的任何值进行操作input.注意:由于您现在处于多线程状态,因此您需要担心您正在做的事情是什么以及它是否是线程安全的.您可能必须锁定或同步.


更新后,围绕关键部分进行锁定更容易,而不是尝试"Interlocked.Exchange"
推荐阅读
oDavid_仔o_880
这个屌丝很懒,什么也没留下!
DevBox开发工具箱 | 专业的在线开发工具网站    京公网安备 11010802040832号  |  京ICP备19059560号-6
Copyright © 1998 - 2020 DevBox.CN. All Rights Reserved devBox.cn 开发工具箱 版权所有