[英]How to open a file with an executable already open?
我有一个C#/ WPF项目,它代表一个dbf编辑器,该编辑器允许您以3种方式打开文件:-在工具栏中使用apposit按钮-拖放-双击文件现在我使用一个TabControl,其中包含每个打开的dbf。 我可以使用内部按钮来处理它,并将添加项拖动到容器中。 如果我双击打开一个文件,并且有一个打开的实例,我想将其添加到容器中,而是打开一个新实例。 我的代码:
公共部分类应用程序:应用程序{
private static Editor mainWindow = null;
protected override void OnStartup(StartupEventArgs e)
{
Editor mainWindow = new Editor(e.Args);
mainWindow.Show();
}
}
编辑:
公共局部类编辑器:Window
{
ChooseMessage.Choose choose; public Dictionary<int, DBFStructure> ds; string DbfName; private string[] OldNew; public Editor(string[] e) { InitializeComponent(); ds = new Dictionary<int, DBFStructure>(); OldNew = new string[2]; choose = ChooseMessage.Choose.OK; if (e.Length > 0) if (File.Exists(e[0]) && e[0].EndsWith(".dbf", StringComparison.InvariantCultureIgnoreCase)) EffOpen(e[0]); } private void dbf_Drop(object sender, DragEventArgs e) { if (e.Data.GetDataPresent(DataFormats.FileDrop, true) == true) { string filename = ((string[])e.Data.GetData(DataFormats.FileDrop, true))[0]; if (File.Exists(filename) && filename.EndsWith(".dbf", StringComparison.InvariantCultureIgnoreCase)) EffOpen(filename); } } .... }
我为显示代码表示歉意,但无法正确设置。
我的问题是从上一个打开的编辑器实例中拦截dbf的打开并将其添加到controltab中,否则创建一个新实例。
PS EffOpen(filename)表示通过传递fil名称,将其加载并将其添加到容器中的方法
谢谢大家
双击打开文件时,Windows将启动一个新的应用程序实例。 这是设计使然,您不能更改此设置。
在这个新实例中,您没有直接引用第一个应用程序实例的对象,因此您不能仅将正在打开的文件添加到第一个实例的TabControl
。
您需要这样实现:
Mutex
来执行此操作; 尝试在应用启动时创建Mutex
并检查Mutex(bool, string, out bool)
构造函数的out
参数-如果为false
,则已经有一个实例 NamedPipe
是一种非常简单的方法
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.