首页
学习
活动
专区
工具
TVP
发布
社区首页 >问答首页 >WPF /控制台混合应用程序

WPF /控制台混合应用程序
EN

Stack Overflow用户
提问于 2011-03-17 20:48:48
回答 3查看 20.1K关注 0票数 16

我编写了一个既可以在命令行上运行,也可以使用WPF UI运行的应用程序。

代码语言:javascript
复制
[STAThread]
static void Main(string[] args)
{
    // Does magic parse args and sets IsCommandLine to true if flag is present
    ParseArgs(args);     

    if(IsCommandLine)
    {
        // Write a bunch of things to the console
    }
    else
    {
        var app = new App();
        app.Run(new Window());
    }
}

我将项目的输出类型设置为Console Application,如果我试图通过双击exe来执行它,我会得到一个弹出的控制台窗口。如果没有设置标志(通过命令args传入),我不想向用户显示控制台窗口。

但是,如果我将项目的输出类型设置为Windows Application,双击行为是正常的,但是当我在控制台中运行它时,我得不到控制台输出(Console.Writeline)

EN

回答 3

Stack Overflow用户

回答已采纳

发布于 2011-03-17 20:51:34

最好的办法是将实际执行工作的代码抽象到一个没有UI的单独类库中,然后创建两个应用程序,一个是控制台,另一个是调用它的WPF。

控制台应用程序和WPF应用程序具有完全不同的应用程序模型,因此不能在这两个应用程序中重用相同的代码。

有了一个单独的类库,你就可以做其他事情,比如在其他应用程序中使用它,比如网站或客户端/服务器架构。

票数 11
EN

Stack Overflow用户

发布于 2017-07-07 01:52:16

创建一个WPF应用程序并将以下代码添加到您的app类中:

代码语言:javascript
复制
public partial class App
{
    protected override void OnStartup(StartupEventArgs e)
    {
        if (e.Args.Length > 0)
        {                
            List<string> lowercaseArgs = e.Args.ToList().ConvertAll(x => x.ToLower());
            if (AttachConsole(ATTACH_PARENT_PROCESS))
            {
                // your console app code                

                Console.Write("\rPress any key to continue...");
                Console.ReadKey();
                FreeConsole();
            }
            Shutdown();
        }
        else
        {
            base.OnStartup(e);
        }
    }

    private const int ATTACH_PARENT_PROCESS = -1;

    [DllImport("kernel32", SetLastError = true)]
    private static extern bool AttachConsole(int dwProcessId);

    [DllImport("kernel32.dll")]
    private static extern bool FreeConsole();
}
票数 8
EN

Stack Overflow用户

发布于 2015-12-04 00:04:51

我知道我来参加聚会有点晚了,但我想我可以说两句话。您可以始终将其保留为控制台应用程序,然后根据此答案隐藏控制台(https://stackoverflow.com/a/3571628/1059953)。控制台显示了片刻,然后它消失了,窗口显示出来。

票数 0
EN
页面原文内容由Stack Overflow提供。腾讯云小微IT领域专用引擎提供翻译支持
原文链接:

https://stackoverflow.com/questions/5339193

复制
相关文章

相似问题

领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档