繁体   English   中英

C#字符串Thread.Sleep()

[英]C# string Thread.Sleep()

嗨,我目前正在使用Thread.Sleep(200); 在文本之间,它看起来像旧的口袋妖怪游戏,文本不是一次全部出现,而是像这样的单词有点滞后

Console.Write("help"); Thread.Sleep(200); Console.Write("me");

而且我想知道是否可以将Thread.Sleep(200)命名/缩短为Ts200类的Ts200 (我的意思是发短信)。 因此,它并不混乱。 因此,使用字符串可能会像这样。

string Ts200
Ts200 = Thread.Sleep(200)
Console.Write("help"); Ts200; Console.Write("me")

但这不起作用。

我收到此错误:

无法将类型void隐式转换为字符串

一种简单的方法是将字符串split为空格上的数组,然后在它们上循环。

using System;
using System.Threading;

public static void slowType(string fullSentence, int millis_pause)
{
   string[] words = fullSentence.Split(' ');
   foreach(string s in words)
   {
       Console.Out.Write(s);
       Thread.Sleep(millis_pause);
       //we must reintroduce the space, since we were splitting on it.
       Console.Out.Write(' ');
   }
   //optionally ; start a new line at the end of the sentence
   Console.Out.Write("\r\n");
}

用法示例:

public static void Main()
{
    string sentence = "i am a terribly slow typist";
    slowType(sentence, 200);
}

如果在Ts200之后不介意() ,请尝试使用lambda

Action Ts200 = () => Thread.Sleep(200); 

...

Ts200();

但是,即使Ts200()可能比Thread.Sleep(200)可读性差,这就是为什么不这样做。

您调用Thread.Sleep(200); 就其本身而言,它不包含任何值。 因此,您不能返回任何值,也不能为其分配任何值,除非方法参数为Thread.Sleep("Here belongs the method parameter, this method accepts an 'int' value") int方法参数设置您要暂停主线程多少毫秒。


尝试这样的事情:

main方法是应用程序执行后的入口点。 因此,当您启动应用程序时,可以调用main方法并执行它。

static void Main(string[] args)
{
    string sentence = "Here you enter your sentence...";
    string[] words = sentence.Split(' ');

    OutputDelayedText(words);
}

string sentence是包含要在控制台上输出的句子的string变量。 因此,我们使用.Split(' ')方法将句子拆分为单个单词。 这将在每个空格' '上分开弹簧,并将单个单词放入string[]数组中。 请注意,您必须在.Split('')方法中使用这些''而不是您可能习惯的"" 那是因为该方法接受一个char值,而那些''表示您只是将一个char作为方法参数。

因此,最后我们将Word array作为方法参数调用OutputDelayedText()方法。

private static void OutputDelayedText(string[] myText)
{
    foreach (var word in myText)
    {
        Console.Write(word + " ");
        Thread.Sleep(200);
    }
}

现在,我们使用一个foreach循环来遍历数组,并将数组的每个元素(句子中的单个单词)写到控制台的一行中。 如果您不熟悉foreach也可以使用forwhile循环。

在Generell中,我建议您使用Task.Delay() 或在WinForms Backgroundworker ,这些将允许您在不同的线程上工作,并且如果您暂停这些线程,则不会暂停您的主线程。 稍后您将遇到此问题,该问题用于暂停任何进程或在后台执行长任务,以在任务仍在运行时不冻结GUI。

但是,请仅从Thread.Sleep()开始,但要记住:在编程艺术中,有很多方法可以实现目标,并且您可能会经常遇到更好的解决方案。

暂无
暂无

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM