c# -没有窗口的程序
本文关键字:程序 窗口 | 更新日期: 2023-09-27 18:06:41
我想知道是否有可能在我的程序以命令行参数开始时自动"关闭"我的主窗口(即当文件名传递时)。我遇到的问题是,当点击与之关联的文件时,我的程序会加载,但是通过打开另一个主窗口并使用它来加载。我遇到的问题是,该程序之后仍然启动主窗口,从而打开两个窗口,一个带有文件内容,另一个为空。
如何防止空白窗口?正如我所看到的,我要么阻止它打开主窗口,要么关闭主窗口,要么让程序将文件传递到主窗口。我的问题是,我不知道哪一个是最好的,也不知道如何去做。
这是代码:
protected override void OnStartup(StartupEventArgs e)
{
if (e.Args != null && e.Args.Count() > 0)
{
this.Properties["ArbitraryArgName"] = e.Args[0];
}
base.OnStartup(e);
if (Application.Current.Properties["ArbitraryArgName"] != null)
{
string fname = Application.Current.Properties["ArbitraryArgName"].ToString();
MainWindow mw = new MainWindow();
mw.Show();
mw.readVcard(fname);
Application.Current.Windows.
}
}
编辑:我的解决方案在底部
我相信您可以添加一个带有自己的Main
方法的单独类,并将其设置为可执行文件的入口点。然后你可以在那里解析方法参数,并选择是否打开主窗口。
(我假设这是一个WPF应用程序-在WinForms应用程序中更简单,因为你可以直接修改原始的Main方法)
我假设您使用WPF?您需要替换WPF为您提供的入口点(Main)。然后,您可以根据命令行参数启动或不启动WPF。有关更多信息,请参阅此问题:
替换WPF入口点
从APP.XAML页面删除WindowUri。这不会显示任何窗口。此外,在app()构造函数或启动事件中添加逻辑。
我将重写您的代码如下:
protected override void OnStartup(StartupEventArgs e)
{
// start application window
MainWindow mw = new MainWindow();
mw.Show();
// store argument and read card info
if (e.Args != null && e.Args.Count() > 0)
{
this.Properties["ArbitraryArgName"] = e.Args[0];
string fname = Application.Current.Properties["ArbitraryArgName"].ToString();
mw.readVcard(fname);
}
}
这里假设方法MainWindow.readVcard(string)
只是将数据加载到当前实例中。
大家好,谢谢你们的回复,抱歉我没有早点回来。Nate所说的部分是正确的,因为我需要更早地调用我的Window,然后,如果有命令行参数,解析文件名。我看到的问题是,它仍然启动了一个主窗口之后,因为它被设置为我的启动,所以我使用Qwertie建议的信息来改变我的app.xaml,这意味着它指向一个不同的启动,这反过来意味着窗口没有不必要地打开。
在App.xaml.cs中的' App: Application '类中:
private void OnStartUp(object sender, StartupEventArgs e)
{
OnStartup(e);
}
protected override void OnStartup(StartupEventArgs e)
{
MainWindow mw = new MainWindow();
if (e.Args != null && e.Args.Count() > 0)
{
this.Properties["ArbitraryArgName"] = e.Args[0];
}
//base.OnStartup(e);
if (Application.Current.Properties["ArbitraryArgName"] != null)
{
string fname = Application.Current.Properties["ArbitraryArgName"].ToString();
mw.Show();
mw.readVcard(fname);
//Application curApp = Application.Current;
//curApp.Shutdown();
}
else if (e.Args.Count() == 0)
{
mw.Show();
}
}
在App.xaml: <Application x:Class="Vcardviewer.App"
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Startup="OnStartUp"
>
<Application.Resources>
</Application.Resources>
</Application>
<!--StartupUri="MainWindow.xaml"-->
再次感谢大家的回答。向大家问好。
我编辑app. xml以删除起始URL。然后编辑App .xaml.cs并为App添加构造函数并在那里进行处理-我使用"Shutdown()"来关闭应用程序。
你可以根据需要打开窗口。当我启动其他窗口时,我使用OnStartup事件来完成它