使用 StreamReader 运行 会使应用程序无响应

Having a StreamReader running makes the application unresponsive

我有一个连接到 IRC 频道并使用 StreamReader 阅读聊天的机器人。一切正常,机器人可以读取和响应,但问题是 Windows 表单在 StreamReader 处于活动状态时冻结。

while(true)
{
    string message = irc.readMessage();
    if (message.Contains("!test"))
    {
        irc.sentChatMessage("answer");
    }
}

我尝试将它放在计时器上,而不是每 100 毫秒滴答一次且没有任何变化的 while 循环。

方法

public string readMessage()
    {
        string message = inputStream.ReadLine();
        return message;
    }

这是因为 inputStream.ReadLine(); 阻塞了 UI 线程。如果您使用异步重载 StreamReader.ReadLineAsync 这将 运行 异步,因此不会阻塞 UI 线程。

样本:

async void StartBot()
{
  while(true)
  {
    string message = await irc.readMessageAsync();
    if (message.Contains("!test"))
    {
        irc.sentChatMessage("answer");
    }
  }
}

public async Task<string> readMessageAsync()
{
   string message = await inputStream.ReadLineAsync();
   return message;
}

您可以找到更多信息以及有关 async 和 await 的示例 here