進程通信例子

from:https://msdn.microsoft.com/zh-cn/library/system.diagnostics.process.beginoutputreadline(v=vs.80).aspx?cs-save-lang=1&cs-lang=csharp#code-snippet-4

備注

可同步或異步讀取?StandardOutput?流。Read、ReadLine?和?ReadToEnd?等方法對進程的輸出流執行同步讀取操作。這些同步讀取操作只有在關聯的?Process?寫入其?StandardOutput?流或關閉該流后才能完成。

相反,BeginOutputReadLine?在?StandardOutput?流上開始異步讀取操作。此方法會為流輸出啟用一個指定的事件處理程序并立即返回到調用方,這樣當流輸出被定向到該事件處理程序時,調用方還可以執行其他操作。

按照這些步驟對?Process?的?StandardOutput?執行異步讀取操作:

  1. 將?UseShellExecute?設置為?false

  2. 將?RedirectStandardOutput?設置為?true

  3. 向?OutputDataReceived?事件添加事件處理程序。事件處理程序必須與?System.Diagnostics.DataReceivedEventHandler?委托簽名相匹配。

  4. 啟動?Process

  5. 調用?Process?的?BeginOutputReadLine。此調用將啟動?StandardOutput?上的異步讀取操作。

啟動異步讀取操作時,關聯的?Process?每向其?StandardOutput?流寫入一行文本時,都將調用該事件處理程序。

可通過調用?CancelOutputRead?取消異步讀取操作。可通過調用方或事件處理程序取消讀取操作。取消之后,可以再次調用BeginOutputReadLine?繼續進行異步讀取操作。

Note注意

您不能對同一個重定向流混合使用異步和同步讀取操作。在異步或同步模式下打開?Process?的重定向流后,對該流的所有進一步的讀取操作都必須在同一模式下進行。例如,不要對?StandardOutput?流調用?BeginOutputReadLine?后接著調用?ReadLine,反之亦然。但是,您可以在不同的模式下讀取兩個不同的流。例如,您可以先調用?BeginOutputReadLine,然后再為?StandardError?流調用?ReadLine

示例

下面的示例說明如何在?sort?命令的重定向?StandardOutput?流上執行異步讀取操作。sort?命令是讀取文字輸入并對其進行排序的一種控制臺應用程序。

本示例將為?SortOutputHandler?事件處理程序創建事件委托,并使其與?OutputDataReceived?事件相關聯。事件處理程序收到來自重定向StandardOutput?流的文本行,然后設置該文本的格式并將文本寫到屏幕上。

C#
C++
VB
// Define the namespaces used by this sample.
using System;
using System.Text;
using System.IO;
using System.Diagnostics;
using System.Threading;
using System.ComponentModel;namespace ProcessAsyncStreamSamples
{class SortOutputRedirection{// Define static variables shared by class methods.private static StringBuilder sortOutput = null;private static int numOutputLines = 0;public static void SortInputListText(){// Initialize the process and its StartInfo properties.// The sort command is a console application that// reads and sorts text input.Process sortProcess;sortProcess = new Process();sortProcess.StartInfo.FileName = "Sort.exe";//捕獲Sort.exe的cout輸出// Set UseShellExecute to false for redirection.sortProcess.StartInfo.UseShellExecute = false;// Redirect the standard output of the sort command.  // This stream is read asynchronously using an event handler.sortProcess.StartInfo.RedirectStandardOutput = true;sortOutput = new StringBuilder("");// Set our event handler to asynchronously read the sort output.sortProcess.OutputDataReceived += new DataReceivedEventHandler(SortOutputHandler);// Redirect standard input as well.  This stream// is used synchronously.sortProcess.StartInfo.RedirectStandardInput = true;// Start the process.sortProcess.Start();// Use a stream writer to synchronously write the sort input.StreamWriter sortStreamWriter = sortProcess.StandardInput;// Start the asynchronous read of the sort output stream.sortProcess.BeginOutputReadLine();// Prompt the user for input text lines.  Write each // line to the redirected input stream of the sort command.Console.WriteLine("Ready to sort up to 50 lines of text");String inputText;int numInputLines = 0;do {Console.WriteLine("Enter a text line (or press the Enter key to stop):");inputText = Console.ReadLine();if (!String.IsNullOrEmpty(inputText)){numInputLines ++;sortStreamWriter.WriteLine(inputText);}}while (!String.IsNullOrEmpty(inputText) && (numInputLines < 50));Console.WriteLine("<end of input stream>");Console.WriteLine();// End the input stream to the sort command.sortStreamWriter.Close();// Wait for the sort process to write the sorted text lines.sortProcess.WaitForExit();if (numOutputLines > 0){// Write the formatted and sorted output to the console.Console.WriteLine(" Sort results = {0} sorted text line(s) ", numOutputLines);Console.WriteLine("----------");Console.WriteLine(sortOutput);}else {Console.WriteLine(" No input lines were sorted.");}sortProcess.Close();}private static void SortOutputHandler(object sendingProcess, DataReceivedEventArgs outLine){// Collect the sort command output.if (!String.IsNullOrEmpty(outLine.Data)){numOutputLines++;// Add the text to the collected output.sortOutput.Append(Environment.NewLine + "[" + numOutputLines.ToString() + "] - " + outLine.Data);}}}
}

.NET Framework 安全性
  • SecurityPermission? 用于調用?Process?的成員。要求值:LinkDemand;命名的權限集:FullTrust

平臺

Windows 98、Windows 2000 SP4、Windows Millennium Edition、Windows Server 2003、Windows XP Media Center Edition、Windows XP Professional x64 Edition、Windows XP SP2、Windows XP Starter Edition

.NET Framework 并不是對每個平臺的所有版本都提供支持。有關受支持版本的列表,請參見系統要求。

版本信息

.NET Framework

受以下版本支持:2.0

請參見

參考

Process 類
Process 成員
System.Diagnostics 命名空間
ProcessStartInfo.RedirectStandardOutput
StandardOutput
OutputDataReceived
DataReceivedEventHandler 委托
CancelOutputRead

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/458326.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/458326.shtml
英文地址,請注明出處:http://en.pswp.cn/news/458326.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

IDEA15 下運行Scala遇到問題以及解決辦法

為了讓Scala運行起來還是很麻煩&#xff0c;為了大家方便&#xff0c;還是記錄下來&#xff1a; 1、首先我下載的是IDEA的社區版本&#xff0c;版本號為15. 2、下載安裝scala插件&#xff1a; 2.1 進入設置菜單。 2.2 點擊安裝JetBrains plugin 2.3 輸入scala查詢插件&#xff…

通過掃碼自定義鏈接安裝iOS app,版本更新總結。

1、打包ipa&#xff0c;plist工具&#xff1a;xcode6證書&#xff1a;企業級開發證書 1.1&#xff09;xcode6開始企業級打包時不在生成plist&#xff0c;需要自己編寫&#xff1a;模版見下&#xff1a; <?xml version"1.0" encoding"UTF-8"?><!…

安排與愿想

機器學習的理論學了好久了&#xff0c;對于回歸&#xff0c;分類&#xff0c;聚類&#xff0c;數據的預處理的各種算法也有了深刻認識&#xff1b; 但紙上談兵&#xff0c;沒有意義&#xff1b; 從今天開始用起來吧&#xff0c;把各種算法的實踐以及思路記錄下來&#xff0c;附…

pdf破解版

網頁說明http://aikongke.com/3754.html1118-1805-7284-0295-8107-3663您好 親 看到您拍的寶貝了&#xff01; 鏈接&#xff1a;http://pan.baidu.com/s/1c0iE44C 密碼&#xff1a;bnyc XI版轉載于:https://www.cnblogs.com/computerMatainance/p/5192834.html

使用try-with-resources替代try finally釋放資源

2019獨角獸企業重金招聘Python工程師標準>>> 1、舊社會 Java里&#xff0c;對于文件操作IO流、數據庫連接等開銷非常昂貴的資源&#xff0c;用完之后必須及時通過close方法將其關閉&#xff0c;否則資源會一直處于打開狀態&#xff0c;直至程序停止&#xff0c;增加…

MFC模態對話框和非模態對話框

MFC中對話框有兩種形式&#xff0c;一個是模態對話框&#xff08;model dialog box&#xff09;&#xff0c;一個是非模態對話框&#xff08;modeless dialog box&#xff09;。一、模態對話框&#xff08;model dialog box&#xff09;在程序運行的過程中&#xff0c;若出現了…

平板電腦離壽終正寢還有多遠?

近期有評論稱&#xff0c;因為大尺寸智能手機越來越普及&#xff0c;小尺寸平板正遭受著越來越嚴重的沖擊&#xff0c;在這樣的背景下&#xff0c;平板廠商也紛紛轉攻超大尺寸平板市場&#xff0c;以此避開大尺寸智能手機的競爭&#xff0c;只是。這樣的策略轉變是否能扭轉平板…

Swift 與 JSON 數據

轉載自&#xff1a; http://www.cnblogs.com/theswiftworld/p/4660177.html 我們大家平時在開發 App 的時候&#xff0c;相信接觸最多的就是 JSON 數據了。只要你的 App 有讀取網絡數據的功能&#xff0c;你就免不了要與 JSON 打交道。比如你做一個新聞 App&#xff0c;你要讀取…

TeamViewer - 最好用強大的免費跨平臺遠程桌面控制軟件 (支持電腦和手機)

from&#xff1a;很早以前 LYcHEE 就提到過&#xff0c;家中的潮人爺爺奶奶每天擺弄著電腦&#xff0c;看看新聞發發郵件&#xff0c;安享晚年生活。只是意料之中的&#xff0c;電腦上莫名出現各種問題&#xff1f;不翼而飛的圖標&#xff1f;照片又忘記怎么導出了&#xff1f;…

【設計模式】7、橋接模式

橋接模式就是對一個類的方法進行抽象化&#xff0c;吧不相關的因素提取出來&#xff0c;發展出第二個類 1 package com.shejimoshi.structural.Bridge;2 3 4 /**5 * 功能&#xff1a;橋接模式使用6 * 意圖&#xff1a;將抽象部分與它的實現部分分離&#xff0c;使他們都…

hadoop HA 之 QJM

前言 本文主要通過對hadoop2.2.0集群配置的過程加以梳理&#xff0c;所有的步驟都是通過自己實際測試。文檔的結構也是根據自己的實際情況而定&#xff0c;同時也會加入自己在實際過程遇到的問題。搭建環境過程不重要&#xff0c;重要點在于搭建過程中遇到的問題&#xff0c;解…

TeamViewer免費版和付費版有什么不同

提到遠程控制軟件 TeamViewer無疑是目前業內知名度比較高的一款&#xff0c;所以說到遠程控制軟件可能大部分人首先想到的就是TeamViewer。在使用功能上&#xff0c;它支持遠程桌面控制、文件傳輸、遠程計算機鎖定、視頻會話、主控方和被控方身份互換&#xff0c;遠程管理無人執…

iOS-關于cell的重疊問題

記得很早之前遇到過一個問題&#xff0c;關于cell的重疊問題&#xff0c;現在回顧總結一下。 iOS中tableview的cell顯示是會消耗內存的&#xff0c;如果要顯示無數個cell&#xff0c;不可能把每個cell都存儲下來&#xff0c;為了解決這個問題&#xff0c;cell就用了重用機制&am…

每天一個Linux命令-ls

ls 命令在linux系統中是使用頻率最頻繁的幾個命令之一,直接使用不帶目錄名&#xff0c;是默認顯示當前目錄的文件及子目錄名稱&#xff0c;ls加指定目錄名&#xff0c;則可以查看指定目錄下的文件及子目錄名稱&#xff0c;ls不僅可以查看目錄下有哪些文件和子目錄&#xff0c;還…

halcon資料鏈接

本文轉載自xiamentingtao&#xff0c;原文地址如下&#xff1a; http://blog.csdn.net/xiamentingtao/article/details/52583787 1目錄(?)[]論壇培訓博客文檔書籍視頻論壇、培訓halcon學習網&#xff1a;http://www.ihalcon.com/鳥叔機器視覺&#xff1a;http://bbs.szvbt.com…

【代碼筆記】iOS-翻書效果的實現

代碼&#xff1a; RootViewController.m #import "RootViewController.h"interface RootViewController ()endimplementation RootViewController- (id)initWithNibName:(NSString *)nibNameOrNil bundle:(NSBundle *)nibBundleOrNil {self [super initWithNibName:…

修改TFS與本地源代碼映射路徑

使用源代碼管理資源管理器修改工作區 在“文件”菜單上單擊“源代碼管理”&#xff0c;再單擊“工作區”。 在“管理工作區”對話框的“名稱”列下&#xff0c;突出顯示要修改的工作區&#xff0c;然后單擊“編輯”。 在“編輯工作區”對話框中&#xff1a; 修改“名稱”框中…

halcon基礎知識

一、程序中的顏色&#xff1a; 綠色&#xff1a;注釋 褐色&#xff1a;控制開發 淺藍色&#xff1a;外部函數——HDevelop函數文件&#xff0c;可在所有Halcon程序中使用 深藍色&#xff1a;圖像獲取和處理 紫色&#xff1a;內部函數——本地程序函數&#xff0c;只在當前程序使…

停止過度設計,開發客戶需要的軟件

在與許多不同的團隊合作過之后&#xff0c;Greg Young發現大家做項目時經常會大幅度的過度設計。比如一個預計要開發9個月的項目&#xff0c;換個角度思考一下&#xff0c;卻可能只需要幾個星期就可以提交95%的功能。Young在最近倫敦舉行的DDD eXchange大會上著重闡述了這一點。…

Halcon—Tuple中符號的含義

2014年08月08日 21:20:30閱讀數&#xff1a;5429實例一&#xff08;3d_coordinates.hdev&#xff09;&#xff1a;for I : 1 to NumImages by 1read_image (Image, calib/calib-3d-coord-I$02d)——C:\Program Files\MVTec\HALCON-10.0\images\的calib文件夾中開頭是calib-3d-c…