控制台应用程序未关闭

时间:2015-07-28 09:07:10

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

我正在开发一个应该在consoleWinCE 6.0下运行的WinCE 7.0应用程序。我出于不同的兼容性原因使用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"但它永远保持开放。 这是我的问题!

  3. 代码段:

    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 6.0

    WinCE 7.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。我收到类型"一般子Windows错误"。

    的错误

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

    同样的行为。

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

    同样的行为。

5 个答案:

答案 0 :(得分:1)

试试这段代码:

Environment.Exit(0);

答案 1 :(得分:0)

您是否将{em> .exe 文件放在Arguments的{​​{1}}属性中? 如果您必须这样做,我相信您已在ProcessStartInfo媒体资源中使用 CMD ,因此您必须在 .exe FileName >名字。 或者只需输入/K .exe 路径即可。 如果你把代码调用你的应用程序,你可以澄清很多。

答案 2 :(得分:0)

尝试拨打Application.Exit

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

答案 3 :(得分:0)

尝试一下:

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

答案 4 :(得分:0)

我有完全一样的问题。在Beckhoff PLC上运行的控制台应用程序从未关闭。

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

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

现在看来,代码运行时无需打开表单。