C# console控制台 如何: 1判断控制台处于等待用户输入状态? 2向输入流写入数据? 3终止输入?

我遇到一个问题,编写一个控制台程序,类似于网络聊天.
作为客户端,我总是在等待用户输入,也就是
while (true)
{
string 用户输入= Console.ReadLine();
执行命令(用户输入);
}
但是该程序同时有个服务端,总是在等待对方发过来的信息,当然这是在另一个线程里面
但是,因为控制台是一个公共资源,
假如 客户端这边程序在Console.ReadLine();程序阻塞,等待用户输入,
这时候,服务端收到一个消息.
console.write("对方请求连接,是否接受?请输入y/n");
string 用户输入= Console.ReadLine();
然而,这个时候,用户输入y,不是返回给服务端,而是返回给客户端....因为客户先使用的readline()
我思考了2天,用线程同步,等无法解决该问题,只有:解决了我标题中的三个问题才能解决,求大侠帮帮忙.
如果,可以重写Console.Readline 或者
可以 不用Console.Readline,自己写代码去获取键盘输入,也能解决我的问题

加标志变量 flag。


主线程:

bool flag = true;

while(true)
{
    string cmd = Console.ReadLine();
    if (flag)
    {
        // 处理Y/N
        flag = false;
    }
    else 
    {
        // 处理本来应该处理的命令
    }
}

接收线程:

Console.Write("对方请求连接,是否接受?Y/N");
flag = true;

 

以上代码仅仅是个思路,实际应用中还需注意线程同步与互斥问题。

温馨提示:内容为网友见解,仅供参考
无其他回答

...如何: 1判断控制台处于等待用户输入状态? 2向输入流写入数据? 3终止...
bool flag = true;while(true){ string cmd = Console.ReadLine(); if (flag) { \/\/ 处理Y\/N flag = false; } else { \/\/ 处理本来应该处理的命令 }}接收线程:Console.Write("对方请求连接,是否接受?Y\/N");flag = true;以上代码仅仅是个思路,实际应用中...

c#控制台程序如何实现输入输出?
1、以C#控制台应用程序为例:Console.WriteLine("输入3个整数,之间以逗号分隔,回车键结束...");string str = Console.ReadLine(); \/\/读入用户输入信息 string[] input = str.Split(new char[] { ',' }); \/\/以逗号为分隔符,分离出各项 if (input.Count() == 3) \/\/不是3,用户输入...

c#控制台中怎么让用户只输入1或者2
在输入前记录当前输出位置(比如定义为pos),然后等待用户输入,输入完成后检测是否是1、2,如果都不是,返回上次记录的输出位置(pos),输出一个空格,将用户的输入覆盖掉,然后再将位置定位至最初的位置(pos) ,等待用户的下一次输入。如些循环即可。

c#输入语句
Console.Read() 。输入流中的下一个字符;如果当前没有更多的字符可供读取,则为负一 (-1)。Read()要在回车之后才开始处理,也就是说,在查询的时候,如果输入t,然后回车,实际上,输入了3个字符, 分别是字符x、回车(13)、换行(10)。当然会出错了。应该这样写 using System;using System.Coll...

关于C#输入和输出的语句,控制台
Console.Readline()从控制台读取一行输入,它是 String 类型的 所以要做类型转换int x=Convert.ToInt32(Console.Readline());Console.Read()从控制台读取一个字符,它是 char 类型的,可以自动转换为 int ,'0' 和 '1' 的 ascii 编码值分别的 48,49 ...

C#console.readline输入值后回车程序直接结束了?
控制台里面一般会在程序的最后写一句 Console.ReadLine();每当到这里的时候就不按键,这时候是用来观察输出和代码的 一旦响应了最后一个控制台监听操作(按了任意按键),你的程序也就结束了 或者你可以更新你的visual studio 到15.8(2017)及以上版本 在设置里面有:调试停止时自动关闭控制台 的选项,...

C#控制台应用程序在等待输入时,用户长时间不输入,如何退回到上一个...
测试时间的话可以使用Timer,设定好Interval后设定Tick时间,调用Start函数等待时间到后Tick会被触发。其实有很多Timer。。System.Windows.Forms.dll里面就有Timer,可以用

C#控制台程序怎么判断输入的是数字 包括小数
Console.Write("请输入一个数");decimal d = Convert.ToDecimal(Console.ReadLine());上面第二句代码,当用户输入的内容不是值类型,此时会抛出异常,如果是值类型,那么会顺利的走下去,正因为这一点,我们可以这样来用:Console.Write("请输入一个数"); try { decimal d = Convert.To...

c#控制台代码 如何取用户输入的两个值
static void Main(string[] args){ Console.WriteLine("请输入2个数,用逗号分隔:");string a = Console.ReadLine();\/\/取到用户输入的字符 \\ string[] array = a.Split(new char[]{','});\/\/分隔字符串 foreach (string s in array){ if (s.Trim() != "")Console.WriteLine(s);} ...

c#如何让用户输入字符串?
在 C# 中,可以使用 `Console.ReadLine()` 方法来从控制台获取用户输入的字符串。该方法会等待用户输入并按下回车键后返回用户输入的内容。例如,下面的代码演示了如何使用 `Console.ReadLine()` 获取用户输入:```csharp using System;class Program { static void Main(string[] args){ Console....

相似回答