C#CF : How to open specific file extension with my program

标签 c# compact-framework

我正在 .Net Compact Framework 中开发移动应用程序。 我设法编辑注册表 HKEY_CLASSES_ROOT,以便单击扩展名为 .xyz 的文件将打开我的应用程序。基本上,我需要在点击这个文件时对其进行一些操作。

但是,我意识到如果我第一次这样做,它会到达位于 static void Main 的 program.cs。但是当程序运行并且我再次单击扩展名为 .xyz 的文件时,它不会加载程序 static void Main。我尝试在当前运行的表单上设置断点,但仍然没有。

那么它去了哪里呢?如何检测文件 .xyz 是否被单击并执行某些操作?

最佳答案

您遇到的最大问题是一旦应用程序运行 Main 将永远不会再次调用,事实上它不应该。

不幸的是,在 Windows Mobile 下,CF 本身试图保持应用程序单例,因此当您尝试再次运行他的应用程序时,CLR 本身会拦截它,而是将现有实例置于最前面。不幸的副作用之一是您没有机会处理命令行参数。

要让它工作,你必须做一些事情:

  1. Subvert the CF's attempt to make your app a sinlgeton所以您可以运行多个实例。
  2. 在应用程序中保持互斥锁以了解您是否已经在运行。
  3. 尽早生成线程以监听来自后续实例的传入参数。当参数进来时,把自己摆在最前面,妥善处理参数。
  4. 启动时,如果互斥量已被占用(即应用程序已在运行),使用 IPC(点对点队列是一种好方法)向现有应用程序的监听器线程(请参阅 #3)发送您的参数然后退出。

关于C#CF : How to open specific file extension with my program,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/2436295/

相关文章:

c# - Windows Mobile 使用面板自动调整大小

.net - Compact Framework - Image.FromStream (Stream, Boolean, Boolean) 的任何实现?

c# - 失去通讯时Compact Framework上的问题

c# - 出现上下文菜单时如何获取鼠标位置?

c# - 自适应Windows移动应用程序

c# - 无限嵌套括号的正则表达式

c# - 检测/诊断线程饥饿

尝试将 AsyncCallback 添加到 BeginInvoke() 时 C# 参数计数不匹配

c# - 如何等待后台 worker 完成处理?

c# - 仅匹配括号中特定字符的模式