我正在为使用Compact Framework of C#的设备开发应用程序。我需要重新启动我的应用程序或再次从Main方法运行带有主窗体的Application.run,以便可以更新它。我不能使用Application.Restart()或只是Application.Run(),因为它们都不能在紧凑的框架中使用。 我试过用:
[DllImport("coredll.dll")]
private static extern bool CeRunAppAtTime(string pwszAppName, DateTime lpTime);
var time = DateTime.Now.AddSeconds(15);
CeRunAppAtTime(fullAppName, time);
但这不起作用。还尝试过:
rocessStartInfo Info = new ProcessStartInfo();
Info.Arguments = "/C ping 127.0.0.1 -n 2 && \"" + fullAppName + "\"";
Info.FileName = "cmd.exe";
Process.Start(Info);
Application.Exit();
但这不起作用并且给了Win32Error。
有没有人有任何其他想法尝试或我在提到的解决方案上做错了什么?有没有办法在Myform.Close()运行后再次执行Application.Run(MyForm)?
我使用的设备在Windows Embedded Handheld 6.5 Professional CE OS 5.2.29094上运行
答案 0 :(得分:0)
CeRunAppAtTime
采用SYSTEMTIME
结构,而不是托管的DateTime,因此您的第一次调用肯定会失败。
第二个看起来你期待CE控制台非常强大。这是一款香草CE设备吗?如果是这样,电话可能无法正常工作,但为什么不打电话来启动您的应用?如果它是Windows Mobile,操作系统会阻止第二个实例运行,那么cmd.exe
甚至不存在(ping
也不存在),因此这将是一个失败点。
你的第一条路是我走的路。只需修复它,以便P / Invoke接受一个long并传递SystemTime值而不是托管DateTime
。