相关疑难解决方法(0)

如何在Windows 10上的UWP中输出到控制台?

有没有办法写入控制台/命令提示符/ powershell(如Console.WriteLine())或UWP应用程序中的类似内容?

如果控制台不可用,那么我可以使用一个合适的替代方法来向屏幕写入大量文本吗?

当然,我可以对它进行XAML控制并输出,但与简单相比,它似乎并不方便Console.WriteLine().

关于WPF控制台也有很老的讨论,但似乎没有任何工作(至少,我找不到Project-Properties-Application tab-Output Type-Console Application并且Trace.WriteLine("text")不可用).

c# console xaml windows-10 uwp

43
推荐指数
1
解决办法
4万
查看次数

从WPF Windows应用程序到实际控制台输出Console.WriteLine

背景:我正在努力为现有的WPF Windows应用程序添加命令行和批处理功能.当我在启动时检测到一些选项时,我禁止窗口出现,进行一些处理并立即退出.现在,因为没有UI,我想将一些消息输出到stdout/stderr.考虑以下代码:

namespace WpfConsoleTest
{
    public partial class App : Application
    {
        protected override void OnStartup(StartupEventArgs e)
        {
            Console.WriteLine("Start");
            System.Threading.Thread.Sleep(1000);
            Console.WriteLine("Stop");
            Shutdown(0);
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

当我从命令行运行时,我希望以下输出:

Start
Stop
Run Code Online (Sandbox Code Playgroud)

但反而:

C:\test>WpfConsoleTest.exe

C:\test>
Run Code Online (Sandbox Code Playgroud)

但是,您可以重定向输出:

C:\test>WpfConsoleTest.exe > out.txt

C:\test>type out.txt
Start
Stop
Run Code Online (Sandbox Code Playgroud)

不幸的是,重定向到CON不起作用:

C:\test>WpfConsoleTest.exe > CON

C:\test>
Run Code Online (Sandbox Code Playgroud)

另一个问题是WpfConsoleTest.exe在启动后立即退出.所以:

C:\test>WpfConsoleTest.exe > out.txt & type out.txt

C:\test>
Run Code Online (Sandbox Code Playgroud)

但:

C:\test>WpfConsoleTest.exe > out.txt & ping localhost > nul & type out.txt
Start
Stop
Run Code Online (Sandbox Code Playgroud)

到目前为止,我能够提供的最佳解决方案是使用start /B /wait:

C:\test>start /B /wait WpfConsoleTest.exe …
Run Code Online (Sandbox Code Playgroud)

c# wpf cmd batch-file

27
推荐指数
3
解决办法
2万
查看次数

使用AllocConsole和目标体系结构x86时没有控制台输出

我有一个WinForms项目,如果用户想要一个调试控制台,我会分配一个控制台AllocConsole().

所有控制台输出都正常工作,目标架构设置为"任何CPU",但当我将其更改为"x86"时,它不输出任何内容(Console.Read()仍然按预期工作).如果我直接打开EXE,则输出有效.看起来Visual Studio将其重定向到它自己的"输出"窗口.

我也试过这个答案,但它没有用,我也尝试过Console.SetOut(GetStdHandle(-11)),但也没用.

将目标体系结构设置为"任何CPU"对我来说是没有选择的.

所以这是我的两个问题:

  • 为什么只有当目标体系结构设置为x86时才会出现这种情况?
  • 在Visual Studio中运行时如何输出到我的控制台?

.net c# pinvoke

22
推荐指数
4
解决办法
2万
查看次数

WPF /控制台混合应用程序

我编写的应用程序可以在命令行上运行,也可以使用WPF UI运行.

[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());
    }
}
Run Code Online (Sandbox Code Playgroud)

我将项目的输出类型设置为控制台应用程序,如果我尝试通过双击exe来执行它,我会弹出一个控制台窗口.如果未设置标志(通过命令args传入),我不想向用户显示控制台窗口.

但是,如果我将项目的输出类型设置为Windows应用程序,则双击行为很好,但是当我在控制台中运行它时,我没有控制台输出(Console.Writeline)

c# wpf

15
推荐指数
2
解决办法
2万
查看次数

如何从WPF应用程序写入命令行?

嗨,我知道如何写入控制台,但如果我在程序中写入控制台并从命令行调用我的程序,它将不会显示任何内容.

当我说Console.WriteLine或Console.Out.Writeline ir打印到调用它的命令提示符而不是其他地方时,我该怎么做呢?

我再一次知道怎么做Console.WriteLine所以它不是那样的:-p除非我做错了.

从我可以告诉它可能与Console.SetOut(TextWriter t)有关

这是一个WPF应用程序,我需要它将其数据发布到命令行,同时仍然在启动时保留GUI.我已经三次检查并且我的代码点击了打印行,我实际上可以看到正在打印到Visual Studio输出窗口的行,当我在没有VS的情况下手动运行它时,它不会显示在命令行中.

如果可能,我需要有条件地拥有控制台显示器.即,如果从命令行(或甚至使用命令参数)运行,则显示或发布到提示符,否则不显示.

c# wpf console command-line

13
推荐指数
2
解决办法
1万
查看次数

在WPF窗口中嵌入控制台窗口

是否可以在WPF窗口中嵌入控制台窗口?

作为一个小背景,起初,我试图在WPF中从头开始实现一个控制台窗口,除了一个巨大的问题之外它是成功的 - 它非常慢.请参阅此处的问题:
Windows WPF或Silverlight中的VT100终端仿真

由于这似乎不是一个选项,我反而考虑在我的WPF应用程序中托管一个实际的控制台窗口,我已经学会了如下所述:

WPF应用程序没有输出到控制台?

这很好,但理想情况下,我希望控制台窗口看起来像是WPF应用程序其余部分的一部分.我知道有可能使用WinForms应用程序,因为我已经看到它完成,涉及使用SetParent Win32 API.您可以看到一个示例.NET项目,该项目使用此CommandBar项目将控制台窗口嵌入到shell中:

http://www.codeproject.com/KB/cs/commandbar.aspx

所以我希望它也可以用WPF完成,但我不知道你是怎么做到的.非常感谢帮助(同样,如果您对我在WPF中从头开始创建终端窗口的原始问题有任何出色的解决方案,因为这也将解决我的需求).

更新:

在Reed Copsey的帮助下,我能够嵌入控制台窗口.但是,当然它需要进行样式化和移动,否则它看起来就像WPF窗口中的常规控制台窗口.我需要标题栏和大边框删除.做研究我想出了如何使用Win32 API这样做:

uint style = GetWindowLong(ConsoleManager.ConsoleWindowHandle, GWL_STYLE);
style &= ~(uint)WindowStyles.WS_CAPTION;
style &= ~(uint)WindowStyles.WS_THICKFRAME;
style &= ~(uint)WindowStyles.WS_DLGFRAME;
style &= ~(uint)WindowStyles.WS_POPUP;
SetWindowLong(ConsoleManager.ConsoleWindowHandle, GWL_STYLE, style);
MoveWindow(ConsoleManager.ConsoleWindowHandle, 0, 0, (int)WindowsFormsHost.ActualWidth, (int)WindowsFormsHost.ActualHeight, true);
Run Code Online (Sandbox Code Playgroud)

但是,有一个大问题.出于某种原因,控制台窗口具有渲染工件.就好像它不会在左下角和右上角重新粉刷一样.工件的宽度类似于标题栏的宽度和粗边框,事实上,如果我留下工件大小的粗边框下降.但只是重新绘制它将无济于事,因为它再次出现.例如,我可以将窗口从屏幕上移开并再次返回以修复它,但它很快就会重新出现:

渲染神器http://img837.imageshack.us/img837/6241/renderissue.png

更新2:即使我不将它父进入WindowsFormsHost控件,效果也会发生.我需要做的就是重现它是启动控制台(使用AllocConsole())然后用SetWindowLong删除它的标题栏.这是一台win7机器.

更新3:似乎"弄乱"其他类似的窗口不受支持.假设有一个标题,控制台窗口计算其textarea,所以没有办法解决这个问题.我认为我在WPF中获得类似控制台的行为的唯一选择是编写自定义WinForms控件然后将其嵌入到WPF中.

.net wpf console console-application

12
推荐指数
2
解决办法
1万
查看次数

WPF应用程序退出代码

我正在尝试设置并获取应用程序退出代码.

我正在尝试做以下事情:

protected override void OnStartup(StartupEventArgs e)
{
    base.OnStartup(e);

    if ( e.Args.Length != 0)
    {


    }
    else
    {
        new MainWindow().ShowDialog();
    }
    Environment.ExitCode = 110;
    this.Shutdown();
}
Run Code Online (Sandbox Code Playgroud)

然后我试图cmd通过它echo %ERRORLEVEL%

但我总是得到结果0,任何想法是什么问题?

.net c# wpf

12
推荐指数
1
解决办法
2万
查看次数

Console.Write()将在WPF中挂起,但在Console应用程序中工作

请阅读Scott Chamberlain的答案,了解为什么它与WI​​NAPI有关.

在Visual Studio中创建一个新的WPF应用程序并更改代码,MainWindow.xaml.cs如下所示.运行该应用程序.代码将在第二次调用时挂起Console.Write().

MainWindow.xaml.cs

using System;
using System.Text;
using System.Windows;

namespace TestWpf
{
    /// <summary>
    /// Interaction logic for MainWindow.xaml
    /// </summary>
    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();

            byte[] msg = new byte[1024];

            string msgStr = Encoding.Default.GetString(msg);

            for (int i = 0; i < 10; i++)
            {
                Console.Write(msgStr);
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

现在,在Visual Studio中创建一个新的控制台应用程序,Program.cs并按如下所示更改代码.运行该应用程序.它将成功运行,即它不会挂起.

Program.cs中

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading.Tasks;

namespace ConsoleApplication1
{ …
Run Code Online (Sandbox Code Playgroud)

c# wpf winapi console-application

11
推荐指数
1
解决办法
1877
查看次数

Windows WPF或Silverlight中的VT100终端仿真

我正在考虑创建一个像终端窗口一样的WPF或Silverlight应用程序.除了,因为它在WPF/Silverlight中,它将能够通过效果,图像等"增强"终端体验.

我正试图找出模拟终端的最佳方法.我知道如何处理VT100仿真,就解析等而言.但是如何显示呢?我考虑过使用RichTextBox并将VT100转义代码转换为RTF.

我看到的问题是性能.终端可能一次只能获得几个字符,并且为了能够将它们加载到文本框中,我将不断创建TextRanges并使用Load()来加载RTF.此外,为了完成每个加载"会话",它必须完全描述RTF.例如,如果当前颜色为红色,则每个加载到TextBox中都需要RTF代码才能使文本变为红色,或者我认为RTB不会将其加载为红色.

这似乎非常多余 - 由仿真构建的RTF文档将非常混乱.此外,插入符号的移动似乎不是理想情况下RTB处理的.我需要一些自定义的东西,但是这让我很害怕!

希望听到明亮的想法或指向现有解决方案.也许有一种方法可以在其上嵌入一个实际的终端和覆盖物.我发现的唯一的东西是旧的WinForms控件.

更新:在下面的答案中查看由于perf的建议解决方案是如何失败的.:(
Windows WPF或Silverlight中的VT100终端仿真

.net silverlight wpf terminal vt100

7
推荐指数
1
解决办法
6892
查看次数

是否可以拥有WPF应用程序打印控制台输出?

我有一个简单的WPF应用程序.在正常使用下,App.xaml将启动MainWindow.xaml.但我想设置它,以便如果使用特殊的命令行参数调用它,它将作为控制台应用程序.

所以这里大概是我的App.xaml.cs文件的样子:

using System;

namespace MyProject
{
    public partial class App : Application
    {
        public void App_OnStartup(object sender, StartupEventArgs e)
        {
            if (e.Args.Length == 1 && e.Args[0].Equals("/console"))
            {
                Console.WriteLine("this is a test");
                Environment.Exit(0);
            }
            else
            {
                var mainWindow = new MainWindow();
                mainWindow.Show();
            }
        }
    }
}
Run Code Online (Sandbox Code Playgroud)

我希望当我从命令行运行时MyProject.exe /console,它会打印字符串"这是一个测试".但是现在它没有打印任何东西.我怎样才能让它发挥作用?

c# wpf console

6
推荐指数
2
解决办法
5766
查看次数

如何在c#.net中清除控制台?

只是.我在这里发现了一个类似的问题:c#console,Console.Clear问题

但那没有回答这个问题.

更新 :

Console.Clear()抛出:IOException(句柄无效)

该应用程序是一个WPF应用程序.然而,写入控制台完全没有问题,也没有读取.

c# wpf console

5
推荐指数
1
解决办法
1万
查看次数

在更新数据库期间有没有办法显示输出?

我正在运行一个相当大的种子作为压力测试,我想知道是否可以向控制台显示输出.

我想显示其余的条目或完成百分比,或者其他任何内容.

有没有办法在update-database期间写入控制台或包管理器控制台?

c# entity-framework

5
推荐指数
1
解决办法
2213
查看次数