利用管道Pipelines做进程间的通讯

news/2024/9/27 8:10:04

代码:

using System;
using System.ComponentModel;
using System.Diagnostics;
using System.IO;
using System.IO.Pipes;
using System.Reflection;
using System.Threading;namespace CgdataBase;public class PipeController
{private static PipeController _instance;public static PipeController Instance => _instance ?? (_instance = new PipeController());private BackgroundWorker _worker;private NamedPipeServerStream _server;private CancellationTokenSource _cts;public event Action ActivateWindow;private string PipeName{get{var assembly = Assembly.GetExecutingAssembly().GetName();return assembly.Name + assembly.Version.ToString();}}public PipeController(){_worker = new BackgroundWorker();_worker.WorkerSupportsCancellation = true;_worker.DoWork += Worker_DoWork;}private async void Worker_DoWork(object sender, DoWorkEventArgs e){_cts = new CancellationTokenSource();var token = _cts.Token;while (token.IsCancellationRequested == false){try{using (_server = new NamedPipeServerStream(PipeName, PipeDirection.In)){await _server.WaitForConnectionAsync(token);Debug.WriteLine("Client connected.");using (StreamReader sr = new StreamReader(_server)){var text = await sr.ReadLineAsync();OnActivateWindow();}}}catch (Exception ex){Debug.WriteLine(ex);}}}private void OnActivateWindow(){ActivateWindow?.Invoke();}public void Start(){_worker.RunWorkerAsync();}public void Stop(){_cts?.Cancel();_worker?.CancelAsync();_server?.Close();}public void WakeUpServer(){try{using (var pipeClient = new NamedPipeClientStream(".", PipeName, PipeDirection.Out)){pipeClient.Connect(100);Debug.WriteLine("Connected to pipe.");using (StreamWriter sw = new StreamWriter(pipeClient)){sw.AutoFlush = true;sw.WriteLine(DateTime.Now.ToString());Thread.Sleep(100);}}}catch (Exception ex){Debug.WriteLine(ex);}}
}

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.ryyt.cn/news/65263.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈,一经查实,立即删除!

相关文章

Cisco Secure Firewall Threat Defense 7.6.0 发布下载,新增功能概览

Cisco Secure Firewall Threat Defense 7.6.0 发布下载,新增功能概览Cisco Secure Firewall Threat Defense 7.6.0 发布下载,新增功能概览 Firepower Threat Defense (FTD) Software Release 7.6.0 Firepower 1100/3100/4100/4200/9300 Security Appliance 请访问原文链接:h…

【译】通过新的 WinUI 工作负荷和模板改进,深入原生 Windows 开发

我们创建了一个新的 Windows Dev Center 页面,简化了我们的 Getting Started with WinUI 文档,并与 Visual Studio 合作来改善开发人员在工作负荷和模板方面的体验。在 Build 2024 上,WinUI 团队宣布将重新关注 WinUI,将其作为我们推荐的原生 Windows 应用开发的首要应用开…

Windows10永久拒绝升级Win11

一、使用组策略阻止升级到windows11 需要专业版或企业版的Windows 10才能访问组策略编辑器。以下是操作步骤:单击开始菜单,输入gpedit.msc,打开本地组策略编辑器。 导航到“计算机配置”>“管理模板”>“Windows组件”>“Windows更新”>“适用于企业的Windows更…

arcgis怎样把面图层按另一面图层分割

摘自https://jingyan.baidu.com/article/6079ad0e9b5c8428fe86db70.htmlarcgis的桌面软件 主要应用于空间数据处理和管理,工作中往往会遇到要批量分割大量的面状数据,并且要按照其所处面的关系赋值。1、打开ArcMap软件,把两个面图层都加载到视图区域内,如下图2、在工具栏中…

10 #### 继承

继承 一定时刻知道,self是哪个类的对象。只要知道是哪个类的对象,就从哪个类开始进行查找 class base: # 父类,也可称为基类pass class Info(base): # 子类,也可称为派生类passclass base: # 父类,也可称为基类def f1(self):print(f1)class Info(base): # 子类,也可称为…

03 对象到底是个啥?

对象到底是个啥? # 2. 基于面向对象的方式实现上述功能 # 定义类 class MessageInfo:# 方法def send_email(to, body):msg = f给{to}发送邮件,内容:{body}print(msg)# 方法def send_dingding(to, body):msg = f给{to}发送邮件,内容:{body}print(msg)# 方法def send_wechat…

04 特殊方法`__init__(self)`

特殊方法__init__(self) class MessageInfo:# 初始化方法def __init__(self, city):self.city = cityself.company = 联通# 方法def send_email(self, to, body):msg = f给{to}发送邮件,内容:{body}print(msg)# 方法def send_dingding(self, to, body):msg = f给{to}发送邮件…

2025 年度技术规划

• quant 无代码图书配代码 • 小说大纲批量提取 • gh高星代码注释和漏洞检测 • 反编译 1000+ apk • 至少一个游戏辅助 • 漫画翻译 • 玄学pdf转md • dao改造 • pmp • kaggle master