首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >问答首页 >IPC windows服务windows窗体

IPC windows服务windows窗体
EN

Stack Overflow用户
提问于 2009-06-06 08:27:48
回答 2查看 1.4K关注 0票数 1

我有一个IPC问题。我已经在windows服务中创建了一个NamedPipeServer:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
serverPipe = new NamedPipeServerStream(Constants.PIPE_NAME, PipeDirection.InOut, 1, PipeTransmissionMode.Message, PipeOptions.Asynchronous);
Thread thread = new Thread(new ThreadStart(pipeWork));
thread.Start();

pipeWork在哪里

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
private static void pipeWork()
{
    try
    {
        byte[] buffer = new byte[1024];
        while (true)
         {
            if (!serverPipe.IsConnected)
                serverPipe.WaitForConnection();
            int nr = serverPipe.Read(buffer, 0, buffer.Length);
            String str=Encoding.Default.GetString(buffer);}
    }
    catch (Exception ex)
    {

    }
}

在Windows窗体中,我有一个客户端

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
clientPipe = new NamedPipeClientStream(".", PhotoServiceClassLibrary.Constants.PIPE_NAME, PipeDirection.InOut,PipeOptions.Asynchronous);
                clientPipe.Connect();
                clientPipe.ReadMode = PipeTransmissionMode.Message;

pipeThread=new Thread(new ThreadStart(pipeWork));
            pipeThread.Start();

pipeWork在哪里

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
private void pipeWork()
{
    try
    {
        while (true)
        {
            using (StreamReader sr = new StreamReader(clientPipe))
            {
                string message;

                while ((message = sr.ReadLine()) != null)
                {}
            }
        }
    }
    catch (Exception ex)
    {

    }
}

我希望当服务开始从windows窗体中禁用ContextMenuStrip的操作时,该服务将向StreamWriter sw写入一条消息:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
        StreamWriter write = null;
        write = new StreamWriter(serverPipe);

        if (serverPipe.IsConnected)
        {
            write.Write(message);
            write.Flush();
        }

代码是正确的,因为我创建了另一个windows窗体来测试它,它实现了windows服务和windows窗体管道服务器之间的通信,-> windows窗体管道客户端运行良好。问题是windows窗体-客户端管道无法接收来自windows服务-服务器管道的消息。

我知道WCF可能是一个更好的想法,但我想知道为什么在低级IPC上不能工作。为什么?我看到了一种非常奇怪的行为。我的服务与windows表单进行了2次交互:1.我的服务是为下载一些照片而设计的。当他开始下载时,他向windows表单发送一条消息,通知他这一点。2.当我停止服务时,他会向windows forms发送一条消息,他也会停止。我刚刚发现,这两条消息只有在服务停止后才会到达windows agent。有人能解释一下原因吗?

EN

回答 2

Stack Overflow用户

发布于 2009-06-06 13:38:23

我希望这不是你真正的代码。在ThreadStart处理程序的代码周围有try/catch块是很好的(否则异常将悄悄地删除线程)。但是,如果您没有在catch块中记录异常,那么它实际上也同样糟糕。

您有一个谜团(服务器没有接收到消息),而您隐藏了信息(发生了异常)。如果你没有隐藏信息,你可能已经解开了谜团(服务器没有收到消息,因为发生了异常)。

票数 1
EN

Stack Overflow用户

发布于 2013-08-19 06:31:20

我正在尝试实现同样的事情。

我注意到您在NamedPipeServerStream (serverPipe)构造函数中传递了PipeTransmissionMode.Message枚举。这意味着流将包含字符串。

但在pipeWork中,您是以字节数组的形式读取它们。

在MSDN上查看本文中的示例:http://msdn.microsoft.com/en-us/library/system.io.pipes.namedpipeclientstream.aspx

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/960064

复制
相关文章
python json转字符串_在python中将json转换为字符串
一开始我没有清楚地解释我的问题。在python中将json转换为字符串时,请尝试使用str()和json.dumps()。
全栈程序员站长
2022/11/16
10.3K0
在 Python 中将一个 Legendre 系列添加到另一个 Legendre 系列
要将一个 Legendre 系列添加到另一个系列,请使用 Python 中的 polynomial.legendre.legadd() 方法 嘟嘟。该方法返回一个数组,表示其总和的勒让德系列。
很酷的站长
2023/02/23
5520
在 Python 中将一个 Legendre 系列添加到另一个 Legendre 系列
常用的JVM参数选项
栈 -Xss128k <==> -XX:ThreadStackSize=128k 设置线程栈的大小为128K
一个风轻云淡
2023/10/15
3430
常用的JVM参数选项
linux常用命令之文件管理默认情况选项参数注意用法选项用法选项用法参数注意用法选项用法选项注意用法选项注意
LS ls:list directory contents 默认情况 默认情况下显示的是mtime 选项 -a 列出全部文件及目录包括隐藏的 -l 列出详细信息,包括文件类型、权限、节点、owner、group、size(b)、修改日期、文件名 -d 列出目录本身,且不列出目录下的内容 -h size用易读的单位 表示,如kg -F 列出文件类型-S按大小从大到小排序 -t  按更新时间从新到旧排序 -r 以相反的顺序排序 -i 显示inode号码 –time=atime 显示访问时间 –time=ct
用户1174983
2018/02/05
2.6K0
jQuery 选项卡插件 FengTab by FungLeo
好无聊啊,权当练手,写了一个选项卡插件 Html 结构 <h2>Demo 1</h2> <div id="FengTab" class="FengTab"> <ul class="tab"> <li>Title 1</li> <li>Title 2</li> <li>Title 3</li> <li>Title 4</li> </ul> <div c
FungLeo
2022/11/28
1.3K0
jquery nicescroll 配置参数
jQuery滚动条插件兼容ie6+、手机、ipad http://www.areaaperta.com/nicescroll/ jQuery(function($){ $("#scrollInner").niceScroll({ touchbehavior:false, cursorcolor:"#398F70", cursoropacitymax:1, cursorwidth:5, cursorborder:
deepcc
2018/05/16
4.1K0
删除所选项(附加搜索部分的jquery)
1.视图端(views)的配置为: <script> $(document).ready(function() { $("#info-grid").kendoGrid({ dataSource: { type: "json",
wfaceboss
2019/04/08
9370
jquery ajax参数详解
type:boolean (默认: true) 默认设置下,所有请求均为异步请求。如果需要发送同步请求,请将此选项设置为 false。注意,同步请求将锁住浏览器,用户其它操作必须等待请求完成才可以执行。
别团等shy哥发育
2023/02/25
2.5K0
python中将字符串转为json对象并
string =" {   "status": "error",   "messages": ["Could not find resource or operation 'BZK1.MapServer' on the system."],   "code": 404
py3study
2020/01/09
1.2K0
Shell脚本的参数和选项
Shell脚本是一种常用的自动化工具,用于编写各种任务和批处理脚本。Shell脚本支持参数和选项,可以让我们更灵活地控制脚本的行为。本文将详细介绍Shell脚本中的参数和选项,包括基本语法、使用方法和示例。
玖叁叁
2023/04/10
2.4K0
python中将 \\uxxxx转换为 Unicode字符串
今天碰到一个很有意思的问题,需要将普通的 Unicode字符串转换为 Unicode编码的字符串,如下:
渔父歌
2018/09/26
2.3K0
在Java中将ArrayList转换为Array
In this tutorial you will learn how to convert ArrayList to Array in Java.
用户7886150
2021/04/29
1.7K0
如何在Python中将列表转换为字符串?
Python provides different variable type for programmers usage. We can use int, float, string, list, set … data types in our applications. While using different type of variables we may need to convert then to different types. In this tutorial we will different type of conversion from list to string in Python.
全栈程序员站长
2022/08/12
4.5K0
如何在 Linux 中将目录添加到 PATH 变量,方便执行自定义命令
在开始之前,让我们先了解一下 PATH 变量的基本概念。PATH 变量是一个由冒号分隔的目录列表,系统将按照这个列表的顺序搜索可执行文件。当我们在终端输入一个命令时,系统会按照 PATH 变量中的目录顺序逐个搜索,直到找到与命令名称匹配的可执行文件或者搜索完所有的目录。
网络技术联盟站
2023/09/06
2.7K0
如何在 Linux 中将目录添加到 PATH 变量,方便执行自定义命令
jquery中ajax参数详解
title: $.ajax参数详解 date: 2017-04-08 15:25:57 tags: ajax categories: ajax
念念不忘
2019/03/29
2.1K0
如何在 Bash 中将字符串计算为数字?
当您尝试在 bash 中进行算术运算时,这会产生问题,您尝试添加的数字会给您带来奇怪的结果。
网络技术联盟站
2022/04/21
1.5K0
如何在 Bash 中将字符串计算为数字?
如何在 Linux 中将目录添加到 PATH 变量,方便执行自定义命令
在 Linux 系统中,PATH 变量是一个非常重要的环境变量,用于指定系统在执行命令时搜索可执行文件的路径。默认情况下,系统会在预定义的一组目录中查找可执行文件。但是,有时候我们可能需要将自定义的目录添加到 PATH 变量中,以便系统能够找到我们自己创建的可执行文件。在本文中,我们将学习如何在 Linux 中将目录添加到 PATH 变量,以便能够方便地执行自定义的命令。
网络技术联盟站
2023/06/09
2.5K0
如何在 Linux 中将目录添加到 PATH 变量,方便执行自定义命令
python中将字符串转为json对象并取值
"messages": ["Could not find resource or operation 'BZK1.MapServer' on the system."],
用户7886150
2021/01/16
2.2K0
如何在 JS 中将字符串切割成字符?
(10) ["D", "r", "a", "g", "o", "n", " ", "�", "�", " "]
酷酷的哀殿
2020/10/26
1.4K0
如何在 TypeScript 中将字符串转换为日期对象?
在应用程序中,我们经常需要将日期字符串转换为日期对象。在 TypeScript 中,由于类型系统的存在,这个过程可能需要一些额外的步骤。在本文中,我们将讨论如何在 TypeScript 中将字符串转换为日期对象,并解决在此过程中可能遇到的一些问题。
网络技术联盟站
2023/06/07
3.5K0

相似问题

Windows窗体和WCF服务

12

WCF请求来自windows窗体,而不是windows服务。

12

WCF:从服务内部访问windows窗体

22

WCF,从服务访问windows窗体控件

50

使用wcf服务Windows窗体应用程序

23
添加站长 进交流群

领取专属 10元无门槛券

AI混元助手 在线答疑

扫码加入开发者社群
关注 腾讯云开发者公众号

洞察 腾讯核心技术

剖析业界实践案例

扫码关注腾讯云开发者公众号
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档
查看详情【社区公告】 技术创作特训营有奖征文