Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/291.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C#CF:如何用我的程序打开特定的文件扩展名_C#_Compact Framework - Fatal编程技术网

C#CF:如何用我的程序打开特定的文件扩展名

C#CF:如何用我的程序打开特定的文件扩展名,c#,compact-framework,C#,Compact Framework,我正在.Net Compact Framework中开发一个移动应用程序。 我设法编辑了注册表HKEY_CLASSES_ROOT,以便单击扩展名为.xyz的文件即可打开我的应用程序。基本上,我需要在点击该文件时对其进行一些操作 但是,我意识到,如果我第一次这样做,它会在static void Main处到达program.cs。但是当程序运行时,我再次单击扩展名为.xyz的文件,它不会加载程序static void Main。我尝试在当前正在运行的窗体上设置断点,但仍然没有设置 那么它去了哪里?

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

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


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

主文件中是否有字符串参数

static void Main(string[] args)

您的问题是要再次调用
static void Main
,这是一个错误。静态构造函数只调用一次。它们在类(在本例中是您的程序)初始化之前被调用,然后不再调用。不会为程序的每个新实例调用它们。

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

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

要使其发挥作用,您必须做以下几件事:

  • 因此,您可以运行多个实例
  • 在应用程序中保持互斥,以了解您是否已经在运行
  • 尽早生成一个线程,以侦听来自后续实例的传入参数。当参数出现时,请站在前面,适当地处理参数
  • 启动时,如果已使用互斥锁(即应用程序已在运行),请使用IPC(点到点队列是一种好方法)发送现有应用程序的侦听器线程(请参见#3)您的参数,然后退出

  • 您说每次单击文件时都需要对其执行一些操作。我假设这是与GUI相关的东西,比如双击文件时希望显示文件的属性


    假设您的程序有一个主窗体,您可以将其
    MinimizeBox
    属性设置为
    false
    ,并在其
    Deactivate
    事件中放置
    this.Close()。这样,当您单击正确类型的文件时,应用程序将启动并读取命令行参数并显示文件详细信息。如果用户随后使用右上角的OK按钮关闭应用程序,它将真正关闭,以便下次打开时打开一个新实例并正确读取命令行参数。或者,如果用户只是导航到WinMo中的其他程序,则应用程序的
    停用
    事件将触发,关闭应用程序。无论采用哪种方式,应用程序都始终处于打开状态和顶部,或者完全关闭状态,因此在“文件资源管理器”中单击文件将始终打开一个新实例。

    您好,请快速回复。我通过将:
    static void Main(){Application.Run(new Main());}
    转换为这个
    static void Main(String[]args){if(args.Length!=0)MessageBox.Show(“Array len!=0”);else MessageBox.Show来允许命令行参数(“Array len=0”);Application.Run(new Main());}
    但当程序运行时,我打开了一个.xyz文件扩展名,它根本无法到达Main。嗯,是的,这可能很难。如果程序运行(),你能将文件拖放到程序中吗?我知道这可能不是首选。它只到达Main(String)[]args)当程序未运行且首次启动时。当我的程序以其窗体和全部运行时,当我单击该文件时,它只打开正在运行的当前窗体(例如:设置窗体)。我不确定这是否是正确的方法。使用我的主程序来处理此操作。基本上,我的主程序具有所有GUI和其他功能。erm如何将文件拖放到移动应用程序的程序中?嘿,SwDevMan81,我正在考虑创建一个额外的.exe文件来处理此操作。基本上,我的c当前的解决方案得到了一些项目。1.主项目具有表单和基本所有内容。2.一些其他项目,我将转换为dll并作为参考输入到我的主项目中,因此我正在考虑添加一个额外的项目来处理此操作。但是在安装过程中如何生成两个单独的.exe文件?或者如何o我将信息从1.exe传递到2.exe。好吧,我现在可能感到困惑。这不会被调用,因为应用程序已经在运行。这一点很好。我认为它会被视为一个类。跳出框框思考。做得好(尽管由于CF中的启动时间,我宁愿不关闭它)@ctacke:谢谢,也谢谢你给我这个机会来使用我最喜欢的笑话:“我不想跳出框框,我只是有一个更大的框框。”。“:)#1是一个很好的技巧,也是一个很好的解释。我很高兴我的同事从未读过那篇文章,因为他们喜欢任何能改变应用程序预期行为的东西。:)