微软公司是如何解决 PC 端程序多开问题的
2023-03-13 来源 : 综艺
如果建立失败,则用WaitForClientConnectionsAsync 马上第 2 个应用比如说顺利进行通到
如果建立失败,则用SendSecondInstanceArgsAsync 向第 1 个应用比如说收发统计数据
定名为的水在的水IP和一个或多个的水服务器端之间提供进程间互联。定名为的水可以是单向的,也可以是双向的。它们拥护基于消息的互联,并必需多个服务器端常用相同的的水旧名同时通到到IP进程。
详细常用说明,请参阅官方文档《常用定名为的水顺利进行局域网进程间互联》 [1]
充分利用2
一个大,我们用启动时程序在顺利进行演示,如何充分利用单个比如说该软件在:
conststringpipeName = "MyIO"; constPipeOptions NamedPipeOptions = PipeOptions.Asynchronous | PipeOptions.CurrentUserOnly;staticasyncTask Main( string[] args ) {try{using( varpipeServer = newNamedPipeServerStream( pipeName: pipeName,direction: PipeDirection.In,maxNumberOfServerInstances: 1, transmissionMode: PipeTransmissionMode.Byte,options: NamedPipeOptions)){WaitForClientConnectionsAsync(pipeServer,str => Console.WriteLine(str));
Console.WriteLine( $"start server {args[ 0]} " ); Console.ReadKey;}}catch{awaitSendSecondInstanceArgsAsync(=> $"call from {args[ 0]} " ).ConfigureAwait( false); }}
须要留意的是,WaitForClientConnectionsAsync 不能另加await ,否则后续编译器不能指派。
▌WaitForClientConnectionsAsync工具充分利用
充分利用编译器如下:
private static async Task WaitForClientConnectionsAsync(NamedPipeServerStream pipeServer, Action callback){CancellationTokenSource cancellationTokenSource = new CancellationTokenSource;while (true){await pipeServer.WaitForConnectionAsync(cancellationTokenSource.Token).ConfigureAwait(false);try{const int bufferLength = 1024;var buffer = new byte[bufferLength];using (var stream = new MemoryStream){while (true){var bytesRead = await pipeServer.ReadAsync(buffer.AsMemory(0, bufferLength), cancellationTokenSource.Token).ConfigureAwait(false);if (bytesRead == 0){break;}stream.Write(buffer, 0, bytesRead);}
stream.Seek(0, SeekOrigin.Begin);
callback(Encoding.UTF8.GetString(stream.ToArray));}}finally{pipeServer.Disconnect;}}}
可逆马上服务器端通到
读取服务器端收发的统计数据,转成字符串
加载callback 处理方式字符串,这里是str => Console.WriteLine(str)
连到服务器端通到
▌SendSecondInstanceArgsAsync工具充分利用
充分利用编译器如下:
private static async Task SendSecondInstanceArgsAsync(Func func){using (var pipeClient = new NamedPipeClientStream(serverName: ".",pipeName: pipeName,direction: PipeDirection.Out,options: NamedPipeOptions)){CancellationTokenSource cancellationTokenSource2 = new CancellationTokenSource;cancellationTokenSource2.CancelAfter(2500);await pipeClient.ConnectAsync(cancellationTokenSource2.Token).ConfigureAwait(false);
await pipeClient.WriteAsync(Encoding.UTF8.GetBytes(func), cancellationTokenSource2.Token).ConfigureAwait(false);}}
建立服务器端通到本地的水服务
向IP收发 func 造成了的统计数据,这里是 => $"call from {args[0]}"Demo
建立多开脚本:
start " " "ConsoleApp1.exe" firstInstancestart " " "ConsoleApp1.exe" secondInstance
start " " "ConsoleApp1.exe" thirdInstance
指派后,我们辨认出程序在必需打开一次。并且接到了其它多开应用发过来的统计数据:
参考资料
[1]《常用定名为的水顺利进行局域网进程间互联》:
_id=DT-MVP-38491
开发者最值得注意研究专家(MVP)
开发者最值得注意研究专家是开发者公司表彰第三方新技术工作者的一个全球获奖者。29年来,世界各地的新技术社区内领袖人物,因其在线上和比方说的新技术社区内里个人长处和经验而获得此获奖者。
MVP是经过严苛挑选的研究专家团队,他们代表着新技术最精湛且最具智慧的人,是对社区内投入非常大的热情并乐于助人的研究专家。MVP致力于通过演讲、论坛问答、建立网站、执笔该网站、个人视频、源代码项目、该组织联席会议等方式来为了让他人,并仅有程度地为了让开发者新技术社区内软件常用 Microsoft 新技术。
更多详见受保护官方网站:
常用定名为的水顺利进行局域网进程间互联
。漳州白癜风医院哪个最好口腔溃疡可以敷必奇蒙脱石散吗
南京哪家皮肤病专科医院好
太极集团
广州看白癜风去哪里好
上一篇: 金徽矿业:再一,逆流而上
-
有多少的城市慢慢就活成了投行的样子
至把ceo胡明偷偷大大部分所有人都拨打了一遍。时长看下来,这还是那些年靠批地、都用征税特惠卖命吆喝的大多中央政府么 ,已经俨然一个摩根士丹利了。 02 淡圳更是老摩根士...
-
ROBOSEN完成近亿美元B轮和B+轮资本
昨日,消费级怪兽品牌「ROBOSEN」(下称:「乐森」)未完成B+轮注资,由沄柏资本领输,银盛泰资本、电磁波中国跟输,包括红杉资本、日初资本、庚辛资本等在内的B轮输资者也在此次B+轮注资中继续追...[详细]
-
元宇宙平台 Decentraland将举办地首个时装周
(记者 徐述评 蔺雨葳)近日,元银河系该平台Decentraland年初,将与本站上商品区块链该平台UNXD联合举办一次月初四天的时装周活动,首个走秀活动将于明年3年初24日至27日开幕,用户可...[详细]
-
BMW召回部分进口AMG GT:行驶过程中可能动力中断 存安全隐患
原标题:Mercedes-Benz(中的国)轿车经销Ltd当月部份进口AMG GT轿车月内,Mercedes-Benz(中的国)轿车经销Ltd根据《缺陷轿车产品当月管理条例》和《缺陷轿车产品当...[详细]
-
特斯拉财务状况创纪录?连续两季度破10亿,特斯拉凭啥逆市上涨?
根据北平晚报的报道,美东北时长周三盘后,盖斯了发布2021年第三本季财务状况。当季,盖斯创造了多项新纪录,取得毫无疑问毫无疑问的财年、营业盈利和毛利。不间断第五个本季实现了年有的销售额,财年便创...[详细]
-
丁祖昱:养老产业政策较快落地,市场空间可期
乐居财经 兰兰12月30日凌晨,2022“跨越——丁祖昱评楼市”年度发布会召开。发布会以两百余页超强干货PPT呈现海量大数据,剖析房地产餐饮业的本质和真凶。点击转至直播》》 ...[详细]