WinForm(二):WinFrom中Main函數的入參和出參

基本上有獨立進程的應用,都是以Main函數作為入口,開始運行的。在C#中,Main函數可以無參無返回值,當然也可以是有string[]參數和int返返回值的。WinFrom也滿足這個規則。

那么Main作為一個進程的開始函數,那么是誰傳這些參數呢?然后又是誰來接收這個返回值呢?顯然不可能是進程本身,那么就是系統,或其他進程了。

namespace WinFormDemo01
{internal static class Program{[STAThread]static int Main(string[] args){MessageBox.Show($"Main方法中收到的參數:{string.Join(',', args)}");ApplicationConfiguration.Initialize();Application.Run(new Form1());return 101;}      }
}

.NET中,除了在Main方法內接收參數,還可以用Enviroment.CommandLine屬性和GetCommandLineArgs方法來接收,屬性會用空格來區分多個參數,方法返回值就是一個string[],與Main中args不一樣的是,這里多一個應用運行所在的路徑。下面的代碼是在Form1窗體里,用一個按鈕來顯示接收到的Main方法參數。

namespace WinFormDemo01
{public partial class Form1 : Form{public Form1(){InitializeComponent();}private void button1_Click(object sender, EventArgs e){//MessageBox.Show(Environment.CommandLine);var args = Environment.GetCommandLineArgs();if (args.Length > 1){label1.Text = $"主程序:{args[0]},\r\n\r\n參數:{string.Join(',', args[1..])}";}  }     }
}

用批處理來調用進程

我們看一下用在widnows系統中來調用bat,實現對Main函數的送參和取返回值,比如這個bat名稱為result.bat,要求這個文件與我們程序在一個文件夾下,啟一個命令行程序,進入到該目錄,運行rusult.bat即可。

@echo off  
WinFormDemo01 guisuwei 1234567890
@if "%ERRORLEVEL%" == "0" goto ok  :fail  echo Execution Failed  echo return value = %ERRORLEVEL%  goto end  :ok  echo Execution succeeded  echo Return value = %ERRORLEVEL%  goto end  :end

結果如下,可以看到Main中的彈框參數

88ff168bdf767165070acdc39d45c986.png

Form1中取Main函數參數

c3fed6e983f37132a481fc58ff980385.png

在命令行中接收到的返回值是101

d30f3b50f2a3faa5265be03e2397ba18.png

用一個進程來調用這個進程

用批處理來調用的情況雖然可實現,但使用場景還有有限的,一般情況下我們是用一個進程調用另一個進程,就像一個是主程序,其他都是子程序類似。

我們用WinFormDemo00來調用WinFormDemo01,這里使用了兩種方式,阻塞方式,也叫同步方式,另一種是非阻塞方式,也可以叫異步方式。buton1_click方法里是異步,就是調起WinFormDemo01后,WinFormDemo00該做什么做什么,不會卡住等它的返回值。button2_click就是這種情況,會卡住,直到返回結果。

using System.Diagnostics;namespace WinFormDemo00
{public partial class Form1 : Form{public Form1(){InitializeComponent();}private void button1_Click(object sender, EventArgs e){//WinFormDemo01所在路徑var pro = Process.Start(@"C:\MyFile\Asp.NetCoreExperiment\Asp.NetCoreExperiment\WinForm\WinFormDemo01\bin\Debug\net7.0-windows\WinFormDemo01.exe", new string[] { "gsw", "abcd" }); //必須啟用這個屬性,事件才能生效pro.EnableRaisingEvents = true;pro.Exited += Pro_Exited;}private void Pro_Exited(object? sender, EventArgs e){//由于是異常,這個方法所在的線程與UI線程不是同一個,所以用這種方式來操作UI線程的控件this.Invoke((object sender) =>{label1.Text = $"{DateTime.Now},WinFormDemo01返回值:{(sender as Process)?.ExitCode.ToString()}";},?sender);?}private void button2_Click(object sender, EventArgs e){var pro = Process.Start(@"C:\MyFile\Asp.NetCoreExperiment\Asp.NetCoreExperiment\WinForm\WinFormDemo01\bin\Debug\net7.0-windows\WinFormDemo01.exe", new string[] { "gsw", "abcd" });//阻塞    pro.WaitForExit();   label1.Text = $"{DateTime.Now},WinFormDemo01返回值:{pro.ExitCode.ToString()}";}}
}

WinFormDemo00界面布局。

96accab1665d439dacea43bc56e606fa.png

其實大部分桌面應用都是單體,所以Main函數的參數和返回值無所謂,但如果你們是做系列產品的,有很多個應用,每個應用都需要登錄,那么,可以通過這種方法把一個應用中的用戶信息或其他信息傳送到另一個應用中,不需要重新登錄,當然,前提是兩個系統共享用戶系統數據。另外,涉密數據的傳送要注意加密。

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

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

相關文章

linux內存回收機制

無論計算機上有多少內存都是不夠的,因而linux kernel需要回收一些很少使用的內存頁面來保證系統持續有內存使用。頁面回收的方式有頁回寫、頁交換和頁丟棄三種方式:如果一個很少使用的頁的后備存儲器是一個塊設備(例如文件映射)&a…

編譯源碼 JAVA out of memory

轉載于:https://www.cnblogs.com/dyufei/p/6612032.html

安卓 Input Events(輸入事件)

在安卓中,有不止一種方法從你的應用截取用戶交互事件。在你的用戶界面中考慮事件,途徑就是從用戶界面中的一個指定的view對象中捕獲事件。該view提供了這樣做的方法。 在你用來組成你布局的不同的view類中,你或許注意到了一些公共的回調方法似…

【GlobalMapper精品教程】029:柵格重分類案例詳解

重分類就是對原有柵格像元值重新分類從而得到一組新值并輸出。重分類工具有多種方法將像元值重新分類或更改為替代值,Globalmapper提供了柵格重分類的功能。 文章目錄 一、柵格重分類簡介二、柵格重分類案例【參考閱讀】:ArcGIS實驗教程——實驗四十三:ArcGIS柵格重分類(Re…

Mybatis 和 JPA 用哪個好? 優缺點 ?

本文不會下關于 Mybatis 和 JPA 兩個持久層框架哪個更好這樣的結論。只是擺事實,講道理,所以,請各位看官勿噴。 一、事件起因 關于 Mybatis 和 JPA 孰優孰劣的問題,爭論已經很多年了。一直也沒有結論,畢竟每個人的喜…

SkiaSharp 之 WPF 自繪 五環彈動球(案例版)

此案例基于拖曳和彈動球兩個技術功能實現,如有不懂的可以參考之前的相關文章,屬于遞進式教程。五環彈動球好吧,名字是我起的,其實,你可以任意個球進行聯動彈動,效果還是很不錯的,有很多前端都是…

【GlobalMapper精品教程】032:瀏覽地理照片及航線信息(航測應用)

本文講述globalmapper軟件在無人機航測了內業處理中的應用之:瀏覽地理照片及航線信息、相機參數、元數據編輯器。 文章目錄 1. 航線信息瀏覽2. 地理圖像瀏覽2.1 數字化工具2.2 要素信息工具2.3 屬性表3. 照片原數據編輯1. 航線信息瀏覽 打開globalmapper軟件,加載無人機航測…

Spring Boot 2.7.0發布,2.5停止維護

這幾天是Spring版本日,很多Spring工件都發布了新版本, Spring Framework 6.0.0 發布了第 4 個里程碑版本,此版本包含所有針對 5.3.20 的修復補丁,以及特定于 6.0 分支的 39 項修復和改進。而今天Spring Boot 2.7.0和Spring Securi…

【GlobalMapper精品教程】031:Globalmapper在航測內業數據處理中的應用舉例

Globalmapper在航測內業數據處理中的應用舉例索引。 文章目錄 1. 圖像及航線瀏覽2. 3D重建3. 點云分類4. 創建地形5. 地形分析1. 圖像及航線瀏覽 擴展閱讀:【GlobalMapper精品教程】032:瀏覽地理照片及航線信息(航測應用) 2. 3D重建 從Global Mapper的19版本開始,Pixels-…

移動工具V和選區工具M

移動工具快捷鍵:V 屬性: 自動選擇 在默認情況下,移動工具的“自動選擇”一項是沒有勾選的。表示只能選中圖層窗口中選定的固定圖層,不能隨意的點擊選擇別的圖層。在這里,我們也勾選“自動選擇”,可任意選擇…

SeleniumWebDriver擴展插件開發

Selenium WebDriver 是一組開源 API,用于自動測試 Web 應用程序,利用它可以通過代碼來控制chrome edge等瀏覽器!有時候我們需要mock接口的返回,或者攔截和轉發請求,今天就來實現這個功能本插件代碼已開源:h…

ZooKeeper的工作原理

ZooKeeper是一個分布式的應用程序協調服務。 2 ZooKeeper的工作原理 Zookeeper 的核心是原子廣播,這個機制保證了各個Server之間的同步。實現這個機制的協議叫做Zab(Zookeeper Atomic Broadcast)協議。Zab協議有兩種模式,它們分別是恢復模式(…

memcache的學習路線圖

memcache學習材料//memcache自帶的github 上的 wiki//席劍飛 Memcache(MC)系列 1~8系列評注: memcache系統寫的最深的一博客,建議一讀。http://blog.csdn.net/xifeijian/article/details/21994941//mysql與memcache的使用https://…

[轉]錢嶺:別擔心“35歲危機”,要成為“老專家”

從清華大學到貝爾實驗室,再到中國移動,作為“IT老人”,錢嶺的技術人生幾乎覆蓋了20世紀90年代至今的信息產業革命。2007年開始,錢嶺在中國移動經歷了基礎科研到產品落地,再到團隊孵化;也經歷了云計算從無到…

【GIS前沿】周成虎院士:GIS的大數據時代展望(PPT分享)

本文源自微信公眾號:宋關福GIS筆記。版權歸原作者及刊載媒體所有,如有侵權請立即與我們聯系,我們將及時處理。更多GIS前言技術,請關注《GIS前言》專欄。 GIS的大數據時代展望

DataV:可視化大屏展示神器實戰分享

由于公司年即將發布新的產品,傳統意義上的PPT顯得不太生動化,所以想采用具體化,可視化的數據大屏進行業務數據的事實展示,第一時間想到了來自于阿里云旗下的DataV,廢話不多說,老司機開始發牌照!…

數據庫性能系列之索引(中)

GOOD NIGHT前言上一篇中,我們已經了解到了索引的基本概念和一些用法。那索引為什么會提升查詢的速度,以及索引究竟是怎么工作的呢?也許大家心里還是有一些迷茫,這一切,還要從索引背后的算法說起。GOOD NIGHT概述大家知…

微服務架構的設計原則和核心話題

目錄 一、前言 二、微服務架構的設計原則 1.拆分足夠微 2.輕量級通信 3.單一職責原則 4.領域驅動原則 三、微服務架構的核心話題 1.服務拆分 2.服務注冊與發現 3.負載均衡 4.API網關 5.服務部署與發布 四、總結 一、前言 毫無疑問,微服務架構的設計原…

4.3.2 基于集合的操作

在SQL Server處理select命令時,會在內存中建立一個結構,以返回結果集。這個結構實質上是一個有行和列的二維數組,稱為“游標(cursor)”。“游標”這個詞是“CURrent set of Records(當前記錄集)”的縮寫。它表示從表或…

Golang GOPATH 包

2019獨角獸企業重金招聘Python工程師標準>>> Golang GOPATH & 包的定義 & 包的導入 GOPATH 設置 go 命令依賴一個重要的環境變量:$GOPATH 可以在 .zshrc 配置文件中加上一行這樣的配置, export GOPATH/Users/flyme/mygo Go從1.1版本到…