【问题标题】:Console application not closing控制台应用程序未关闭
【发布时间】:2015-07-28 09:07:09
【问题描述】:

我正在开发一个应该在WinCE 6.0WinCE 7.0 下运行的console 应用程序。出于不同的兼容性原因,我使用C#Compact Framework 2.0

我的应用程序由名为TwinCAT(来自 Beckhoff)的外部运行时启动。在这个应用程序中,我的队友使用了一个名为nt_startProcess(文档here)的功能块,它负责按需启动我的应用程序。

我的问题 - 取决于操作系统的两种不同行为:

  1. cmd 行手动启动(不使用 TwinCAT)时:

    我的应用程序在两个系统上都能正常运行。这意味着,应用程序启动,显示“Hello World”,然后返回到cmd 行。

  2. 从 TwinCAT 启动时:

    a) 在WinCE 6.0 上,我可以看到一个 cmd 行打开,显示“Hello World”,然后立即关闭。对我来说完美的行为。

    b) 在WinCE 7.0 上,我可以看到一个 cmd 行打开,显示“Hello World”,但它永远保持打开状态。 这是我的问题!

代码 sn-p:

using System;
using System.Collections.Generic;
using System.Text;

namespace MyBasicExample
{
  class Program
  {
    static void Main(string[] args)
    {
      Console.WriteLine("Hello World");
    }
  }
}

编译信息

在 Visual Studio 2008 中,在项目编译的属性中:

  • 平台目标:任何 CPU

补充说明:

请注意,运行 WinCE 6.0 的计算机使用 i486 处理器,而运行 WinCE 7.0 的计算机使用 Freescale ArmCortex 进程。

WinCE 6.0:

WinCE 7.0:

我尝试了什么:

1) 在应用程序结束时使用return 0;

在 WinCE 7.0 上没有任何改变。

2) 使用Environment.Exit(0);

在 Compact Framework 2.0 中不可用。

3) 使用属性:IsBackground

片段:

// ... Same snippet as above except for the next line...
Thread.CurrentThread.IsBackground = true;
Console.WriteLine("Hello World");
// ...

4) 从 TwinCAT 调用批处理文件(调用我的 exe)而不是我的 exe。

不适用于 TwinCAT。我收到“常规子窗口错误”类型的错误。

5) 使用 Compact Framework 3.5 进行测试。

同样的行为。

6) 在另一台使用 Windows CE 7.0 和另一种处理器架构(Intel Pentium III Xeon Model A)的 CX 计算机(型号 2020)上进行了测试。

同样的行为。

【问题讨论】:

  • 试过 Environment.Exit(0) ?
  • @Chaka 我没想到。我试过 return 0;没有太大的成功...我们现在正在尝试。
  • @Chaka 我在 Compact framework 2.0 中似乎没有 Exit 方法。
  • 从未使用过 WinCE,但使用了通用的“调试帽”,您是否可以在 Arm 上尝试 WinCE 6,或在 Intel 上尝试 WinCE 7,看看问题是否与 WinCE 版本有关或该平台? 不知道那会告诉你什么,但它可能会给某人一个线索。
  • 我用 WinCE7 和 Intel 架构进行了测试。我遇到同样的问题。所以你的问题来自操作系统。即使使用 GUI 应用程序(我的想法是将控制台重定向到 TextBox,并在 GUI 应用程序中模拟控制台应用程序),表单正在关闭,但过程并没有结束。如果我从 cmd 启动我的应用程序(GUI 或控制台、CF 2.0 或 3.5、Application.Exit(0)return 0),我必须 ctrl+C 结束进程。

标签: c# .net windows-ce c#-2.0 twincat


【解决方案1】:

试试这个代码:

Environment.Exit(0);

【讨论】:

    【解决方案2】:

    试试这个:

    工具 > 选项 > 调试 > 调试停止时自动关闭控制台

    【讨论】:

      【解决方案3】:

      您是否将 .exe 文件放入 ProcessStartInfoArguments 属性中? 如果你必须这样做,我相信你在FileName 属性中使用了CMD,所以你必须在.exe 名称之前使用/K。 或者只是把FileName .exe 路径。 如果您将调用您的应用程序的代码放入其中,您可以澄清很多。

      【讨论】:

        【解决方案4】:

        尝试拨打Application.Exit

        这适用于窗口应用程序,并且可能会强制关闭控制台窗口。

        【讨论】:

          【解决方案5】:

          我遇到了完全相同的问题。在 Beckhoff PLC 上运行从未关闭的控制台应用程序。

          我没有创建控制台应用程序,而是创建了 Windows 应用程序。 我的代码与控制台应用程序相同。我刚刚注释掉了:

          // Application.Run(new Form1());
          

          现在似乎代码无需打开表单即可运行。

          【讨论】:

            猜你喜欢
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 1970-01-01
            • 2011-04-11
            • 2015-10-19
            • 2011-08-06
            • 2012-10-05
            • 1970-01-01
            相关资源
            最近更新 更多