gpt4 book ai didi

c# - 作为 Windows 窗体或控制台应用程序运行的 .NET 应用程序

转载 作者:可可西里 更新时间:2023-11-01 07:43:24 24 4
gpt4 key购买 nike

我希望以编程方式从命令行运行我的 Windows 窗体应用程序之一。在准备过程中,我已将其自身类中的逻辑与 Form 分开。现在,我一直在尝试让应用程序根据命令行参数的存在来回切换。

这是主类的代码:

static class Program
{
/// <summary>
/// The main entry point for the application.
/// </summary>
[STAThread]
static void Main()
{
string[] args = Environment.GetCommandLineArgs();
if (args.Length > 1) // gets passed its path, by default
{
CommandLineWork(args);
return;
}

Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}

private static void CommandLineWork(string[] args)
{
Console.WriteLine("It works!");
Console.ReadLine();
}

Form1 是我的表单,It works! 字符串只是实际逻辑的占位符。

现在,当从 Visual Studio 中运行它时(使用命令行参数),短语 It works! 被打印到输出中。但是,当运行/bin/Debug/Program.exe 文件(或/Release 就此而言)时,应用程序崩溃。

我的做法是否正确?让我的逻辑类成为由两个单独的应用程序加载的 DLL 是否更有意义(即花费更少的开发时间)?还是有什么我不知道的完全不同的东西?

提前致谢!

最佳答案

如果检测到命令行参数,则需要 P/Invoke AllocConsole()。在 this thread 中查看我的答案对于所需的代码。 C# 示例位于页面下方。在这里重复,因为我不相信那个糟糕的论坛网站:

using System;
using System.Windows.Forms;

namespace WindowsApplication1 {
static class Program {
[STAThread]
static void Main(string[] args) {
if (args.Length > 0) {
// Command line given, display console
AllocConsole();
ConsoleMain(args);
}
else {
Application.EnableVisualStyles();
Application.SetCompatibleTextRenderingDefault(false);
Application.Run(new Form1());
}
}
private static void ConsoleMain(string[] args) {
Console.WriteLine("Command line = {0}", Environment.CommandLine);
for (int ix = 0; ix < args.Length; ++ix)
Console.WriteLine("Argument{0} = {1}", ix + 1, args[ix]);
Console.ReadLine();
}

[System.Runtime.InteropServices.DllImport("kernel32.dll")]
private static extern bool AllocConsole();
}
}

关于c# - 作为 Windows 窗体或控制台应用程序运行的 .NET 应用程序,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2813942/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com