【发布时间】:2015-07-28 09:07:09
【问题描述】:
我正在开发一个应该在WinCE 6.0 和WinCE 7.0 下运行的console 应用程序。出于不同的兼容性原因,我使用C#、Compact Framework 2.0。
我的应用程序由名为TwinCAT(来自 Beckhoff)的外部运行时启动。在这个应用程序中,我的队友使用了一个名为nt_startProcess(文档here)的功能块,它负责按需启动我的应用程序。
我的问题 - 取决于操作系统的两种不同行为:
-
从
cmd行手动启动(不使用 TwinCAT)时:我的应用程序在两个系统上都能正常运行。这意味着,应用程序启动,显示“Hello World”,然后返回到
cmd行。 -
从 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