C# 控制台应用程序未关闭

C# 控制台应用程序未关闭,c#,.net,windows-ce,c#-2.0,twincat,C#,.net,Windows Ce,C# 2.0,Twincat,我正在开发一个控制台应用程序,应该在WinCE 6.0和WinCE 7.0下运行。出于不同的兼容性原因,我正在使用C#,compactframework2.0 我的应用程序由一个名为TwinCAT(来自Beckhoff)的外部运行时启动。在这个应用程序中,我的队友使用了一个名为nt\u startProcess(文档)的功能块,负责按需启动我的应用程序 我的问题-两种不同的行为取决于操作系统: 从cmd行手动启动时(无TwinCAT): 我的应用程序在两个系统上都能正常运行。这意味着,应用程序启

我正在开发一个
控制台
应用程序,应该在
WinCE 6.0
WinCE 7.0
下运行。出于不同的兼容性原因,我正在使用
C#
compactframework2.0

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

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

  • cmd
    行手动启动时(无TwinCAT):

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

  • 从TwinCAT启动时:

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

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

  • 代码片段:

    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
    附加说明:

    using System;
    using System.Collections.Generic;
    using System.Text;
    
    namespace MyBasicExample
    {
      class Program
      {
        static void Main(string[] args)
        {
          Console.WriteLine("Hello World");
        }
      }
    }
    
    请注意,运行WinCE 6.0的计算机使用的是i486处理器,而运行WinCE 7.0的计算机使用的是飞思卡尔ArmCortex进程

    WinCE 6.0:

    WinCE 7.0:

    我的尝试:

    1) 使用
    返回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的CX计算机(2020型)和另一种处理器体系结构(英特尔奔腾III至强A型)进行测试

    相同的行为。

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

    尝试调用
    应用程序。退出

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

    请尝试以下代码:

    Environment.Exit(0);
    
    试试这个:


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

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

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

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

    现在代码似乎在不打开表单的情况下运行。

    尝试了环境。退出(0)?@Chaka我没有想到这一点。我尝试返回0;没有多少成功。。。我们现在正在尝试。@Chaka我似乎无法在Compact framework 2.0中使用Exit方法。从未在WinCE上使用过,但在通用的“调试帽”打开的情况下,您是否能够在Arm上尝试WinCE 6,或在Intel上尝试WinCE 7,以查看问题是否与WinCE版本或平台有关?我不知道这会告诉你什么,但它可能会给人一个线索。我用WinCE7和Intel架构运行了一个测试。我也遇到同样的问题。所以你的问题来自操作系统。即使使用GUI应用程序(我的想法是将控制台重定向到文本框,并在GUI应用程序中模拟控制台应用程序),表单也会关闭,但过程不会结束。如果我从cmd启动我的应用程序(GUI或控制台,CF 2.0或3.5,
    应用程序。退出(0)
    返回0
    ),我必须
    ctrl+C
    结束该过程。