سؤال

أحاول إنشاء تطبيق WPF يأخذ وسيطات سطر الأوامر.إذا لم يتم إعطاء أية وسائط، فيجب أن تظهر النافذة الرئيسية.في حالات بعض وسائط سطر الأوامر المحددة، يجب تشغيل التعليمات البرمجية بدون واجهة المستخدم الرسومية والخروج عند الانتهاء.سيكون موضع تقدير أي اقتراحات حول كيفية القيام بذلك بشكل صحيح.

هل كانت مفيدة؟

المحلول

أولاً، ابحث عن هذه السمة في الجزء العلوي من ملف App.xaml الخاص بك وقم بإزالتها:

StartupUri="Window1.xaml"

وهذا يعني أن التطبيق لن يقوم تلقائيًا بإنشاء مثيل لنافذتك الرئيسية وإظهارها.

بعد ذلك، قم بتجاوز طريقة OnStartup في فئة التطبيق الخاصة بك لتنفيذ المنطق:

protected override void OnStartup(StartupEventArgs e)
{
    base.OnStartup(e);

    if ( /* test command-line params */ )
    {
        /* do stuff without a GUI */
    }
    else
    {
        new Window1().ShowDialog();
    }
    this.Shutdown();
}

نصائح أخرى

للتحقق من وجود حجتك - في حل مات، استخدم هذا للاختبار:

e.Args.Contains("MyTriggerArg")

مجموعة من الحلول المذكورة أعلاه، لـ .NET 4.0+ مع الإخراج إلى وحدة التحكم:

[DllImport("Kernel32.dll")]
public static extern bool AttachConsole(int processID);

protected override void OnStartup(StartupEventArgs e)
{
    base.OnStartup(e);

    if (e.Args.Contains("--GUI"))
    {
        // Launch GUI and pass arguments in case you want to use them.
        new MainWindow(e).ShowDialog();
    }
    else
    {
        //Do command line stuff
        if (e.Args.Length > 0)
        {
            string parameter = e.Args[0].ToString();
            WriteToConsole(parameter);
        }
    }
    Shutdown();
}

public void WriteToConsole(string message)
{
    AttachConsole(-1);
    Console.WriteLine(message);
}

قم بتغيير المنشئ في MainWindow الخاص بك لقبول الوسائط:

public partial class MainWindow : Window
{
    public MainWindow(StartupEventArgs e)
    {
        InitializeComponent();
    }
}

ولا تنس إزالة:

StartupUri="MainWindow.xaml"

يمكنك استخدام ما يلي في app.xaml.cs ملف :

private void Application_Startup(object sender, StartupEventArgs e)
{
    MainWindow WindowToDisplay = new MainWindow();

    if (e.Args.Length == 0)
    {
        WindowToDisplay.Show();
    }
    else
    {
        string FirstArgument = e.Args[0].ToString();
        string SecondArgument = e.Args[1].ToString();
        //your logic here
    }
}
مرخصة بموجب: CC-BY-SA مع الإسناد
لا تنتمي إلى StackOverflow
scroll top