【发布时间】:2012-01-20 01:02:02
【问题描述】:
我之前发布了另一个关于从上下文菜单应用程序中获取参数的问题。如果您选择一个项目,它会为您提供该项目的字符串路径,但它会为每个选择的大于一个的项目启动一个新的应用程序实例。使用 Environment.GetCommandLineArgs() 它为您提供一个字符串数组,第一个元素是调用函数的 .exe,第二个元素是所选项目的字符串路径。同样,如果我选择 2 个或更多项目并右键单击 >> 运行应用程序,我将获得 2 个或更多应用程序实例,每个实例的第一个元素作为 .exe,然后第二个元素作为所选项目之一。 (我在加入两个元素后使用 MessageBox.Show() 执行此操作,它弹出消息框 3 次,选择的三个项目中的每个项目 1 次)。
现在我使用 Mutex 只允许它运行一次,但我只得到第一个消息框(如预期的那样)。
如果我选择多个项目,如何获取一个实例中列出的所有项目?
这里是没有互斥锁的代码:
static void Main()
{
String[] args = Environment.GetCommandLineArgs();
var message = string.Join(", ", args);
MessageBox.Show(message);
}
这里是互斥锁:
static void Main()
{
Mutex startOnlyOne = new Mutex(false, "WinSyncSingalInstanceMutx");
if (startOnlyOne.WaitOne(0, false))
{
String[] args = Environment.GetCommandLineArgs();
var message = string.Join(", ", args);
MessageBox.Show(message);
startOnlyOne.Close();
}
还没有人能帮我解决这个问题,我希望有人能帮我解决这个问题。提前谢谢...
【问题讨论】:
-
您使用了很多代词,难以理解您在做什么。例如,您说“它确实 X”,但没有明确说明“它”是什么。
-
该应用程序是 Windows 上下文菜单应用程序...在桌面上选择一个文件并右键单击...在该上下文菜单中是我的应用程序。选择应用程序,它将获取所选文件的文件路径并将其添加到集合中(如果选择了多个文件,则应将多个文件路径添加到集合中)。这有帮助吗?
-
那么,你的意思是你的程序是一个shell扩展?
标签: c# collections contextmenu mutex command-line-arguments