我正在试图模拟聊天客户端。首先是这里的代码
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
namespace thread
{
class Program
{
public static Thread t1;
public static Thread t2;
public static bool flag;
public static Random rand = new Random();
static void Main(string[] args)
{
t1 = new Thread(first);
t2 = new Thread(second);
t1.Start();
t2.Start();
Console.Read();
}
public static void first()
{
string[] phrase = { "Hello", "random", "blah,blah", "computer", "Welcome", "This is chat bot" };
while (!flag)
{
Thread.Sleep(4000);
Console.WriteLine("{0}", phrase[rand.Next(6)]);
}
}
public static void second()
{
string input = "";
while (input!="x")
{
input=Console.ReadLine();
if (input=="x")
{
break;
}
}
flag = true;
}
}
}
好的,所以这个程序会在控制台上自动打印一些文字,我也可以在屏幕上写下我的信息。现在的问题是,每当我打字长句时, 任何需要超过4秒钟输入的东西。然后,而不是在下一行打印自动消息,它只是附加到我正在键入的任何内容。我对多线程很陌生,所以我不确定是什么问题。我认为两个线程都使用相同的控制台类。
在这方面可以获得帮助。
答案 0 :(得分:2)
在控制台中实现聊天客户端非常困难。它可以可能,但它并不是一件轻而易举的事。
在基于GUI的环境中实现它要容易得多,例如winforms,您可以在其中拥有两个完全独立的文本区域,一个用于输入,另一个用于输出。
为了在控制台中执行此操作,您需要在需要显示测试时将光标移动到上一行,写出该文本,然后将光标移回用户使用的位置。输入。但是这样做会覆盖前一行文本,因此在此之前需要在行上写入前一行文本,依此类推,直到你到达缓冲区的顶部,该行可以完全删除。最重要的是,您无法从控制台读取信息,因此您需要跟踪内存中的所有内容,以便完成整个写操作。
在winform中做所有事情要容易得多。要写出信息,只需将其添加到输出文本框中的文本,并在"发送"按下按钮或输入,只需清除输入文本框并处理它的内容。你不必担心这两者之间的相互作用。
答案 1 :(得分:1)
使用Console
描述类似聊天的应用程序是不切实际的。如果您真的希望看到它正常运行,请尝试使用WinForm
或WPF
应用程序,您可以通过Controls
的形式提供大量选项,以显示facebook
,就像聊天一样使用ListBox
控件等
显然这是一种方式,但在Console
中实现它真的很难。
答案 2 :(得分:1)
Lol 2ez
ceil
此方法允许您在用户使用" Console.ReadLine()"时写入消息。在另一个线程上。我假设您的聊天消息的接收是异步的,或者发生在另一个线程上。
你可以添加一些lock(){},这将是完美的。