ডাব্লুপিএফ কমান্ড লাইন


99

আমি একটি ডাব্লুপিএফ অ্যাপ্লিকেশন তৈরি করার চেষ্টা করছি যা কমান্ড লাইনের আর্গুমেন্ট নেয়। যদি কোনও যুক্তি না দেওয়া হয় তবে মূল উইন্ডোটি পপ আপ করা উচিত। কিছু নির্দিষ্ট কমান্ড লাইন আর্গুমেন্টের ক্ষেত্রে, কোডটি কোনও জিইউআই ছাড়াই চালানো উচিত এবং শেষ হয়ে গেলে প্রস্থান করা উচিত। এটি কীভাবে সঠিকভাবে করা উচিত সে সম্পর্কে কোনও পরামর্শ প্রশংসিত হবে।

উত্তর:


159

প্রথমে আপনার App.xaml ফাইলের শীর্ষে এই বৈশিষ্ট্যটি সন্ধান করুন এবং এটিকে সরিয়ে দিন:

StartupUri="Window1.xaml"

এর অর্থ এই যে অ্যাপ্লিকেশনটি স্বয়ংক্রিয়ভাবে আপনার মূল উইন্ডোটি ইনস্ট্যান্ট করবে না এবং এটি প্রদর্শন করবে না।

এরপরে, যুক্তিটি সম্পাদন করতে আপনার অ্যাপ্লিকেশন শ্রেণিতে অন স্টার্টআপ পদ্ধতিটি ওভাররাইড করুন:

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();
}

আপনি কি সেই মুহূর্তে কনসোলের সাথে (কনসোল.আরেডলাইন / রাইটলাইন) যোগাযোগ করতে পারেন?
কায়রান বেনটন

অবশ্যই আপনি কনসোলকে কল করতে পারেন W রাইটলাইন, কিন্তু আপনি যে কনসোলটি থেকে অ্যাপটি চালু করেছিলেন তাতে আউটপুট উপস্থিত হবে না। আমি নিশ্চিত নই যে ডাব্লুপিএফ প্রয়োগের প্রসঙ্গে "কনসোল" কী।
ম্যাট হ্যামিল্টন

38
অ্যাপটি চালু হয়েছিল এমন কনসোলে লেখার জন্য আপনাকে অ্যাটাকসনসোল (-1), কনসোল.রাইটলাইন (বার্তা) এবং তারপরে ফ্রি কনসোল () কল করতে হবে you're
অল্টম্যান

7
সাবধান: উইন্ডোজ 1.xaml এ আমরা অ্যাপ সংস্থান ব্যবহার করতে পারি না। এগুলি এখনও লোড করা হয়নি: এগুলি System.Windows.Application.DoStartup (অভ্যন্তরীণ পদ্ধতি) এ লোড করা হয় এবং ডোনস্টার্টআপটিকে অনস্টার্টআপের ঠিক পরে বলা হয়।
মুইবিয়েন কার্লোটা

26

আপনার যুক্তির অস্তিত্ব পরীক্ষা করতে - ম্যাটসের সমাধানে এটি আপনার পরীক্ষার জন্য ব্যবহার করুন:

e.Args.Contains ("মাই ট্রাইগারআর্গ")


4

কনসোলে আউটপুট সহ .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);
}

যুক্তি স্বীকার করতে আপনার মেইন উইন্ডোতে নির্মাণকারীকে পরিবর্তন করুন:

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

এবং অপসারণ করতে ভুলবেন না:

StartupUri="MainWindow.xaml"

1

আপনি 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
    }
}
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.