当前位置: 首页 > news >正文

山西建设公司网站免费制作图片的app

山西建设公司网站,免费制作图片的app,怎么用自己的网站做链轮,建网站的公司大全前言上次#xff0c;我们通过《引用 Microsoft.VisualBasic 解决程序多开的问题》。虽然它非常简单#xff0c;但是仅适用于 WinForm 应用程序#xff0c;而且还需要引用不常用的Microsoft.VisualBasic类库。因此#xff0c;我们决定深挖一下#xff0c;看看具体是如何实现… 前言上次我们通过《引用 Microsoft.VisualBasic 解决程序多开的问题》。虽然它非常简单但是仅适用于 WinForm 应用程序而且还需要引用不常用的Microsoft.VisualBasic类库。因此我们决定深挖一下看看具体是如何实现的。原理通过查看WindowsFormsApplicationBase的Run方法实现代码有删减Public Sub Run(commandLine As String())If Not IsSingleInstance ThenDoApplicationModel()Else This is a Single-Instance applicationDim pipeServer As NamedPipeServerStream  NothingIf TryCreatePipeServer(ApplicationInstanceID, pipeServer) Then --- This is the first instance of a single-instance application to run.Using pipeServerWaitForClientConnectionsAsync(pipeServer, AddressOf OnStartupNextInstanceMarshallingAdaptor, cancellationToken:tokenSource.Token)DoApplicationModel()End UsingElseDim awaitable  SendSecondInstanceArgsAsync(ApplicationInstanceID, commandLine, cancellationToken:tokenSource.Token).ConfigureAwait(False)awaitable.GetAwaiter().GetResult()End IfEnd If Single-Instance application End Sub可以分析出整个流程如下创建一个NamedPipeServerStream实例如果创建成功则用WaitForClientConnectionsAsync等待第 2 个应用实例进行连接如果创建失败则用SendSecondInstanceArgsAsync向第 1 个应用实例发送数据NamedPipeServerStream使用NamedPipeServerStream类可以创建命名管道。命名管道在管道服务器和一个或多个管道客户端之间提供进程间通信。命名管道可以是单向的也可以是双向的。它们支持基于消息的通信并允许多个客户端使用相同的管道名称同时连接到服务器进程。详细使用说明请参阅官方文档《使用命名管道进行网络进程间通信》[1]实现下面我们用控制台程序进行演示const string pipeName  MyIO; const PipeOptions NamedPipeOptions  PipeOptions.Asynchronous | PipeOptions.CurrentUserOnly;static async Task Main(string[] args) {try{using (var pipeServer  new NamedPipeServerStream(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{await SendSecondInstanceArgsAsync(() $call from {args[0]}).ConfigureAwait(false);} }需要注意的是WaitForClientConnectionsAsync不能加await否则后续代码不能执行。WaitForClientConnectionsAsync实现代码如下private static async Task WaitForClientConnectionsAsync(NamedPipeServerStream pipeServer, Actionstring 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(Funcstring 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);} }创建客户端连接本地管道服务向服务端发送func产生的数据这里是() $call from {args[0]}Demo创建多开脚本start   ConsoleApp1.exe firstInstancestart   ConsoleApp1.exe secondInstancestart   ConsoleApp1.exe thirdInstance执行后我们发现程序只能打开一次。并且收到了其它多开应用发过来的数据结论使用NamedPipeServerStream相对互斥锁Mutex的实现要复杂。但是由于可以进行通讯因此可以做到更灵活的控制。比如应用定时启动自己的另一个实例去下载更新下载完成后通知当前应用提示用户是否更新。想了解更多内容请关注我的个人公众号”My IO“参考资料[1]《使用命名管道进行网络进程间通信》: https://docs.microsoft.com/zh-cn/dotnet/standard/io/how-to-use-named-pipes-for-network-interprocess-communication?WT.mc_idDT-MVP-38491
http://www.pierceye.com/news/400596/

相关文章:

  • 电商网站建设课设用什么软件制作网站
  • 杭州手机网站wordpress随机调用页面
  • html5网站编写长网页网站
  • 订餐网站系统建设方案建一个网上商城需要多少钱
  • 手机网站asp付费抽奖网站怎么做
  • 国际网站哪里做vs2010 c 建设网站
  • 企业网站更新什么内容永城做网站
  • wordpress 众筹网站模板html5风格网站特色
  • 服装设计参考网站重庆景点排名
  • 网至普的营销型网站建设扬州网站商城建设价格表
  • 成品网站价格表简答网站内容建设的时候内链重要性
  • 视频链接生成器某网站搜索引擎优化
  • flash网站案例vi设计是设计什么
  • ip查询网站备案查询企业网络营销推广平台
  • 多城市网站建设免费制作小程序的平台
  • 郑州网站建设出名吗?wordpress获取登录密码
  • 网站建设论文的开题报告重庆市工程建设信息
  • 商务网站设计方案门户网站的优点
  • 河津网站制作wampserver做的网站
  • 洛阳专业网站设计开发制作建站公司零陵区住房和城乡建设局网站
  • 在哪里可以学做网站游戏开发大亨下载
  • 找人做ps的网站无锡 做公司网站
  • 云速建站可以建个人网站吗wordpress仿站难吗
  • 如何取外贸网站域名凡科h5制作教程
  • 蜘蛛不抓取网站的原因中山h5网站建设
  • 百度免费推广网站建网站用的免费软件
  • 网站建设西安哪里好广州做企业网站的公司
  • 汉中市网站建设爱墙 网站怎么做
  • 失物招领网站开发项目需求分析搭建外文网站
  • 免费网站空间免备案自学php做网站