C# 命名管道流 readline 挂起

2024-02-24

我很困惑。我有命名管道的客户端/服务器结构,问题出在某个随机点,经过一段时间的工作后,它只是挂在streamReader.ReadLine();上 它只是停下来,不再继续。我很困惑,我根本不知道发生了什么,也不知道如何调试它,为什么以及何时发生。有任何想法吗?

客户端有时会这样做:

   private void Connect()
    {
        stream = new NamedPipeClientStream(".", "MP9", PipeDirection.InOut);
        try
        {
            stream.Connect(120);
        }
        catch (Exception e)
        {
            run = false;
            return;
        }

        //Initialising Readers/Writers
        sr = new StreamReader(stream);
        sw = new StreamWriter(stream);
    }

private string SendMessage(string msg)
{
    Debug.WriteLine("Will listen for message " + msg);

    string msgFrom = "";
    if (run)
    {
        string toReturn = "";
        lock (locker)
        {

            sw.WriteLine(msg); //Writing command to the pipes
            stream.WaitForPipeDrain(); //Waiting for another process to read the command
            msgFrom = sr.ReadLine(); //Reading
        }
    }
    return msgFrom;
}

我的服务器有一个线程,它监听任何消息,并在需要时做出响应。运行 X 小时后,它将停止在 ReadLine 处,没有错误等。只是停在线路上,不再继续前进。但是应用程序仍在运行,它没有挂起,只是这个侦听器线程似乎挂起......

void Listen()
{
    try
    {
        stream.WaitForConnection();
        sw.AutoFlush = true;
        string messageTo = "";
        while (running) //Main loop of the thread
        {
            messageFrom = "";
            //HERE IT CAN JUST HANG AND NOT GO FURTHER....
            messageFrom = sr.ReadLine(); //Reading

            //populate message to with data, if is needed to respond

            sw.WriteLine(messageTo);
            stream.WaitForPipeDrain();
        }
    }
 }

如果您读取所有数据,似乎就会发生这种情况。

如果您在阅读之前执行“Peek()”并检查大于 0 的值,您应该能够解决此问题。

stream.WaitForConnection();
    sw.AutoFlush = true;
    string messageTo = "";
    while (running) //Main loop of the thread
    {
        messageFrom = "";
        if(sr.Peek() > 0)
        {
           messageFrom = sr.ReadLine(); //Reading

          //populate message to with data, if is needed to respond

           sw.WriteLine(messageTo);
        }
        stream.WaitForPipeDrain();
本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

C# 命名管道流 readline 挂起 的相关文章

  • 为什么使用abs()或fabs()而不是条件否定?

    在 C C 中 为什么要使用abs or fabs 不使用以下代码即可查找变量的绝对值 int absoluteValue value lt 0 value value 这与较低级别的指令较少有关吗 您提出的 有条件的abs 并不等于std
  • Tensorflow 中的自定义资源

    由于某些原因 我需要为 Tensorflow 实现自定义资源 我试图从查找表实现中获得灵感 如果我理解得好的话 我需要实现3个TF操作 创建我的资源 资源的初始化 例如 在查找表的情况下填充哈希表 执行查找 查找 查询步骤 为了促进实施 我
  • 将处理后的图形绘制到另一个图形中

    我想将一个经过处理的图形绘制到另一个图形中 I have two graphics var gHead Graphics FromImage h var gBackground Graphics FromImage b Transform
  • Mono 无法保存用户设置

    我在 Mono Ubuntu 上保存用户设置时遇到问题 这是代码示例 private void Form1 Load object sender EventArgs e string savedText Properties Setting
  • 在 C++ 中分割大文件

    我正在尝试编写一个程序 该程序接受一个大文件 任何类型 并将其分成许多较小的 块 我想我已经有了基本的想法 但由于某种原因我无法创建超过 12 kb 的块大小 我知道谷歌等上有一些解决方案 但我更感兴趣的是了解这个限制的根源是什么 然后实际
  • 使用实体框架从集合中删除项目

    我正在使用DDD 我有一个 Product 类 它是一个聚合根 public class Product IAggregateRoot public virtual ICollection
  • Guid 应包含 32 位数字和 4 个破折号

    我有一个包含 createuserwizard 控件的网站 创建帐户后 验证电子邮件及其验证 URL 将发送到用户的电子邮件地址 但是 当我进行测试运行时 单击电子邮件中的 URL 时 会出现以下错误 Guid should contain
  • 在 Xcode4 中使用 Boost

    有人设置 C Xcode4 项目来使用 Boost 吗 对于一个简单的 C 控制台应用程序 我需要在 Xcode 中设置哪些设置 Thanks 用这个来管理它 和这个
  • TextBox 焦点的 WinForms 事件?

    我想添加一个偶数TextBox当它有焦点时 我知道我可以用一个简单的方法来做到这一点textbox1 Focus并检查布尔值 但我不想那样做 我想这样做 this tGID Focus new System EventHandler thi
  • 为什么密码错误会导致“填充无效且无法删除”?

    我需要一些简单的字符串加密 所以我编写了以下代码 有很多 灵感 来自here http www codeproject com KB security DotNetCrypto aspx create and initialize a cr
  • 为什么 std::allocator 在 C++17 中丢失成员类型/函数?

    一边看着std 分配器 http en cppreference com w cpp memory allocator 我看到成员 value type pointer const pointer reference const refer
  • C++派生模板类继承自模板基类,无法调用基类构造函数[重复]

    这个问题在这里已经有答案了 我试图从基类 模板 继承 派生类也是模板 它们具有相同的类型 T 我收到编译错误 非法成员初始化 Base 不是基类或成员 为什么 如何调用基类构造函数 include
  • 范围和临时初始化列表

    我试图将我认为是纯右值的内容传递到范围适配器闭包对象中 除非我将名称绑定到初始值设定项列表并使其成为左值 否则它不会编译 这里发生了什么 include
  • “MyClass”的类型初始值设定项引发异常

    以下是我的Windows服务代码 当我调试代码时 我收到错误 异常 CSMessageUtility CSDetails 的类型初始值设定项引发异常 using System using System Collections Generic
  • UWP 无法在两个应用程序之间创建本地主机连接

    我正在尝试在两个 UWP 应用程序之间设置 TCP 连接 当服务器和客户端在同一个应用程序中运行时 它可以正常工作 但是 当我将服务器部分移动到一个应用程序并将客户端部分移动到另一个应用程序时 ConnectAsync 会引发异常 服务器未
  • 内核开发和 C++ [关闭]

    Closed 这个问题是基于意见的 help closed questions 目前不接受答案 从我know https stackoverflow com questions 580292 what languages are windo
  • 为什么我使用google'smtp'无法发送电子邮件?

    我有以下程序使用 smtp gmail com 587 发送电子邮件 namespace TestMailServer class Program static void Main string args MailMessage mail
  • 以编程方式使用自定义元素创建网格

    我正在尝试以编程方式创建一个网格 并将自定义控件作为子项附加到网格中 作为 2x2 矩阵中的第 0 行第 0 列 为了让事情变得更棘手 我使用了 MVVM 设计模式 下面是一些代码可以帮助大家理解这个想法 应用程序 xaml cs base
  • boost::program_options:带有固定和可变标记的参数?

    是否可以在 boost program options 中使用此类参数 program p1 123 p2 234 p3 345 p12 678 即 是否可以使用第一个标记指定参数名称 例如 p 后跟一个数字 是动态的吗 我想避免这种情况
  • 如何确定母版页中正在显示哪个子页?

    我正在母版页上编写代码 我需要知道正在显示哪个子 内容 页面 我怎样才能以编程方式做到这一点 我用这个 string pageName this ContentPlaceHolder1 Page GetType FullName 它以 AS

随机推荐

  • Django 1.7:提供 pdf 文件(UnicodeDecodeError)

    我正在尝试使用 django 1 7 提供 PDF 文件 这基本上是 应该 工作的代码 如果我将 content type 更改为 文本 并用它下载 tex 文件 它当然可以工作 但是当我用二进制文件尝试 得到 UnicodeDecodeE
  • 在 Gherkin 中使用正确的语法

    查找有关 Gherkin 的文档似乎非常困难 所以我想知道是否有一种方法可以增强步骤定义以使测试人员能够使用正确的语法 有一个例子可以说明我的意思 Testing Then I see there is 1 item More testin
  • Rails 4 + Capistrano 3:部署:检查不起作用

    我可以成功通过 SSH 连接到我的服务器 然而 当我这样做时deploy check 它给了我这个 Nets Mac Pro mysite emai be cap staging deploy check INFO e67f845c Run
  • Git:通过标签从远程拉取

    我是 git 的初学者 通过创建一个本地存储库来进行拉取和推送 在本地计算机上测试了几个命令 我在 project 中设置了一个裸存储库 并从中克隆了两个用户 user1 和 user2 该项目当前具有文件 one txt two txt
  • 如何使用 AppleScript 按类别过滤 Outlook for Mac 日历事件

    我正在尝试在 OSX 上编写一个 Applescript 以根据事件类别 例如 日历事件 过滤 Outlook for Mac 2011 日历事件 查找标记为 会议 的所有活动 例如 我有一个名为 WWDC 的日历事件 可以通过以下脚本找到
  • 通过 SoapClient 连接到 eBay Trading API 会抛出“Web 服务 eBayAPI 未正确配置或未找到且已禁用”异常

    我正在尝试连接到 eBay 交易 API 并使用 PHP 的 SoapClient 类发出基本请求 但遇到了麻烦 我已经花了几个小时搜索和摆弄示例 但我无法让任何东西发挥作用 所以我编写了以下准系统代码 并试图让它工作 token toke
  • 如何创建适合移动设备的网站[基础设施]

    如果我想创建一个相对较小的网站的移动友好版本 最好有一个子域 该子域可以重定向到具有单独标记和样式的全新网址 或者最好在代码中检测用户代理并以编程方式更改到不同的移动友好样式表 或者他们是我忽略的更好的基于基础设施的解决方案 Thanks
  • 如何将 gltf 编码/压缩为 draco

    我想使用 draco 在三个 js 和 Reactjs 中以编程方式压缩 编码 gltf 文件 我不想使用任何命令行工具 我希望以编程方式完成 请给我建议一个解决方案 我尝试使用 gltf pipeline 但它在客户端不起作用 当我在re
  • ReactJs 地图在 IE10 中未定义

    我看到类似的问题并尝试了一切但没有帮助 我收到错误 map is undefined in ie10 和 ie11 在我的项目上进行此更改后 ie11 可以工作 但 ie10 不能 在我的 package json 中 browsersli
  • 独立加速发生器

    我需要开发一个独立的 Acceleo 生成器 但我不知道如何启动 我已经在 Acceleo 项目中完成了生成器 Acceleo 项目包含generate mtl 文件 Generate java 文件和Activator java 文件 我
  • Xamarin.Forms(可为空)DatePicker:缺少确定和取消事件的解决方法

    我正在使用可为空的DatePicker https developer xamarin com api type Xamarin Forms DatePicker 它是通过子类化来实现的DatePicker并使用自定义渲染器 public
  • 用户输入验证,强制字符串仅包含字母

    我试图在我的方法之一中创建一个用户输入验证系统 它在一定程度上工作正常 但是尽管有代码 它仍然允许整数作为有效输入 我不希望它成为这样 我怎么能更改此代码 仅允许字母 字符串 作为有效输入 我在这一点上感到困惑 我尝试了这个系统的整数 它工
  • jQuery 浏览器兼容性 (IE)

    由于我试图向您展示的源代码相当长且复杂 因此我只是提供一个指向我遇到问题的页面的链接 http www thesportinghub com lms make my picks http www thesportinghub com lms
  • 将一个元素绑定到两个源

    我目前有两个接受任何数字的文本框 我有一个文本块 它接受输入的两个数字并计算平均值 我想知道是否有一种方法可以将此文本块绑定到两个文本框并利用自定义转换器来计算平均值 我目前正在捕获两个文本框中的文本更改事件并以这种方式计算平均值 但我假设
  • 没有安装的配置文件与安装的 iOS 代码签名密钥匹配

    当我选择 iphone 设备并构建时 它显示 xamarin ios 的错误 错误 555 没有安装的配置文件与安装的 iOS 代码签名密钥匹配 请帮助解决这个问题 尝试以下步骤重新安装证书和配置文件 去苹果会员中心 http develo
  • 如何使用 Spring JPA 对 jsonb 列进行查询?

    我正在使用 Spring JPA 和 PostgreSQL 数据库 我有一个实体如下 Entity TypeDef name json binary typeClass com vladmihalcea hibernate type jso
  • 更改 Kivy 中按钮的背景颜色

    我是 Kivy 的新手 在指定按钮的背景颜色时遇到困难 这是我的简单例子 custombutton py from kivy app import App from kivy uix widget import Widget class M
  • 获取 .Net 中 CryptoStream 的长度

    我正在开发加密 解密文件的软件 我希望能够猜测加密后数据的长度 但我无法使用 CryptoStream Length 它会抛出 NotSupportedException 有什么办法可以猜出来吗 我正在使用 RijndaelManaged
  • 带有尾部斜杠的奇怪 Nginx 行为

    我有一个非常有趣的行为 我想避免在我的网站上的 URL 中出现尾随斜杠 我已经把rewrite 1 permanent 规则进入我的服务器块 所以 https example com something https example com
  • C# 命名管道流 readline 挂起

    我很困惑 我有命名管道的客户端 服务器结构 问题出在某个随机点 经过一段时间的工作后 它只是挂在streamReader ReadLine 上 它只是停下来 不再继续 我很困惑 我根本不知道发生了什么 也不知道如何调试它 为什么以及何时发生