トップ回答者
Application.Run()の戻り値について

質問
-
回答
-
Application.Run メソッドは void なので何か値を返すというようにはできないと思いますが、exe の終了コードは下記のように設定できます。(Main メソッドが void の場合)
Environment.ExitCode = 0; // exe の終了コードを設定
Main メソッドが int を返す場合は、その値が Environment.ExitCode よりも優先されるようです。例えば Form で何らかの戻り値を設定したい場合は下記のようなコードで実現できます。using System.Windows.Forms; namespace ConsoleApplication1 { public partial class Form1 : Form { public int Result { get; private set; } public Form1() { InitializeComponent(); } private void Form1_FormClosed(object sender, FormClosedEventArgs e) { Result = 1000; // 終了時のコードを設定 } } class Program { static int Main(string[] args) { Form1 form1 = new Form1(); Application.Run(form1); int nReturnValue = form1.Result; return nReturnValue; } } }
参考サイト:
https://msdn.microsoft.com/ja-jp/library/0fwzzxz2(v=vs.120).aspx
https://stackoverflow.com/questions/6643598/returning-value-to-main-c-sharp- 編集済み kenjinoteMVP 2018年3月7日 7:00
- 回答としてマーク まるこめ 2018年3月8日 0:14
すべての返信
-
Application.Run メソッドは void なので何か値を返すというようにはできないと思いますが、exe の終了コードは下記のように設定できます。(Main メソッドが void の場合)
Environment.ExitCode = 0; // exe の終了コードを設定
Main メソッドが int を返す場合は、その値が Environment.ExitCode よりも優先されるようです。例えば Form で何らかの戻り値を設定したい場合は下記のようなコードで実現できます。using System.Windows.Forms; namespace ConsoleApplication1 { public partial class Form1 : Form { public int Result { get; private set; } public Form1() { InitializeComponent(); } private void Form1_FormClosed(object sender, FormClosedEventArgs e) { Result = 1000; // 終了時のコードを設定 } } class Program { static int Main(string[] args) { Form1 form1 = new Form1(); Application.Run(form1); int nReturnValue = form1.Result; return nReturnValue; } } }
参考サイト:
https://msdn.microsoft.com/ja-jp/library/0fwzzxz2(v=vs.120).aspx
https://stackoverflow.com/questions/6643598/returning-value-to-main-c-sharp- 編集済み kenjinoteMVP 2018年3月7日 7:00
- 回答としてマーク まるこめ 2018年3月8日 0:14
-
ちょっとApplication.Runに拘りすぎな気がします。これも普通のメソッド呼び出しにすぎないので。ただ、Application.Runは、メインフォームが閉じられる、あるいはApplication.Exitが呼び出される、などまで返ってこなくなります。この辺は、Application.Runの行とその次の行に2つブレークポイントを張って動作を確認すればすぐわかるかと思います。
プロセスが値を返したいなら、Application.Run(および、あるなら後処理も)のあとに、Mainの最後でreturn 返値;とすればいいです(Environment.Exit(返値)で直ちにプロセスを終了させることもできますが、正常系の処理ではないでしょう)。
-
ちょっとApplication.Runに拘りすぎな気がします。これも普通のメソッド呼び出しにすぎないので。
mainの最後でReturnっていうのは昔のC(実は私はこれより前でまともにVisual Studioを触ったことはほとんどなく、まっとうにやってたのはMS-Cまでさかのぼる始末です・・・・)でわかってはいたのですが、ほとんどの処理がform側で行われてしまうため、その場合ってどうなんだろうなぁと思い質問した次第です。すいません。
メソッドの呼び出しには何種類かあるのは知ってますが・・・