আমি কীভাবে প্রোগ্রামের মাধ্যমে ডাব্লুপিএফ অ্যাপ্লিকেশনটি প্রস্থান করব?


477

কয়েক বছরে আমি সি # (উইন্ডোজ ফর্ম) ব্যবহার করেছি, আমি কখনও ডাব্লুপিএফ ব্যবহার করি নি। তবে, এখন আমি ডাব্লুপিএফকে ভালবাসি, তবে ব্যবহারকারী যখন ফাইল মেনু থেকে প্রস্থান মেনু আইটেমটিতে ক্লিক করেন তখন আমার অ্যাপ্লিকেশনটি কীভাবে প্রস্থান করবেন তা আমি জানি না।

আমি চেষ্টা করেছি:

this.Dispose();
this.Exit();
Application.ShutDown();
Application.Exit();
Application.Dispose();

অন্য অনেকের মধ্যে। কিছুই কাজ করে না।

উত্তর:


780

আপনার অ্যাপ্লিকেশন থেকে প্রস্থান করতে আপনি কল করতে পারেন

System.Windows.Application.Current.Shutdown();

Application.Shutdownপদ্ধতিটিতে ডকুমেন্টেশনে বর্ণিত হিসাবে আপনি শাটডাউনমড উল্লেখ করে আপনার অ্যাপ্লিকেশনটির শাটডাউন আচরণটিও সংশোধন করতে পারেন :

উইন্ডোজ উপস্থাপনা ফাউন্ডেশন (ডাব্লুপিএফ) নীচের পরিস্থিতিতে বন্ধ করে বলা হয়:

  • শাটডাউনমডটি অনলাস্ট উইন্ডো ক্লোজে সেট করা আছে।
  • যখন শাটডাউনমডটি অনমাইনওয়াইডো ক্লোজে সেট করা আছে।
  • যখন কোনও ব্যবহারকারী কোনও অধিবেশন শেষ করে এবং সেশনএন্ডিং ইভেন্টটি হয় নাহাঁটে, বা বাতিল ছাড়াই পরিচালিত হয়।

দয়া করে নোট করুন যে Application.Current.Shutdown();কেবলমাত্র সেই থ্রেড থেকে কল করা যেতে পারে যা Applicationবস্তুটি তৈরি করেছে , অর্থাৎ সাধারণত মূল থ্রেড।


8
আমি ইঙ্গিত হিসাবে এটি অদ্ভুত না। ডাব্লুপিএফ এপ্লিকেশন একটি স্ট্যাটিক ক্লাস। অ্যাপ্লিকেশন। বর্তমান আপনার চলমান অ্যাপ্লিকেশনটির একটি উল্লেখ।
টিমোথি পি

4
আমার মতে, এই দৃষ্টিভঙ্গিটি একটু অদ্ভুত যে প্রথম নজরে এটি স্পষ্ট নয় এবং এটি মানুষকে বিতাড়িত করার জন্য অতীতের মডেলগুলির থেকে যথেষ্ট পরিমাণে বিচ্যুত হয়। এটি নিখুঁত বোঝায় যে এটি অবশ্যই কাজ করে।
ব্রায়ান ম্যাকেকে

20
আপনি যদি Application.Current.Shutdown();আপনার ফোঞ্চনটি কল করেন তবে তাৎক্ষণিকভাবে ফিরে আসবে না। এর জন্য আপনাকেও কল করতে হবে return;
এরউইন মায়ার

2
আমি এটি ব্যবহার করেছি যেখানে একটি উইন্ডো থেকে অন্য উইন্ডোটি পপ আপ হয় এবং সেই উইন্ডোটির উইন্ডো_ক্লোজড ইভেন্টটিতে আমি এই কোডটি যুক্ত করেছি। সমস্ত উইন্ডোজ অদৃশ্য হয়ে যায়, কিন্তু পপ আপ তৈরি হওয়ার পরে প্রোগ্রামটি এখনও চালিয়ে যায়।
diyoda_

7
@ টিমোথিপি নং Applicationস্থির শ্রেণি নয়। Application.Currentস্থির সদস্য হওয়ার অর্থ এটি স্থির নয়। পরিবর্তে, এটি উত্পন্ন করা যেতে পারে এমন একটি সাধারণ শ্রেণি।
আর্থ ইঞ্জিন

156

আপনার যদি সত্যিই এটি বন্ধ করার প্রয়োজন হয় তবে আপনি পরিবেশ.এক্সিট () ব্যবহার করতে পারেন , তবে এটি মোটেও মনোমুগ্ধকর নয় (প্রক্রিয়াটি শেষ করার মতো)।

এটি নিম্নলিখিত হিসাবে ব্যবহার করুন:

Environment.Exit(0)

4
Environment.Exit()কমপক্ষে একটি পরামিতি প্রয়োজন, একটি প্রস্থান কোড। ব্যবহার করুন Environment.Exit(0)যদি আপনি প্রস্থান কোড নিয়ে উদ্বিগ্ন নেই।
gbmhunter

23
এই পদ্ধতিটি আসলে সবকিছু বন্ধ করে দিয়েছে। আমার অ্যাপ্লিকেশনটি কিছু চলমান রেখেছিল (ফর্মটি বন্ধ হয়ে যাচ্ছিল, তবে একটি প্রক্রিয়া এখনও চলছে)Application.Current.Shutdown();
gbmhunter

4
এনভায়রনমেন্ট.এক্সিট অবশ্যই কোনও অ্যাপ্লিকেশনটির শাটডাউন নিশ্চিত করার সঠিক উপায়। অ্যাপ্লিকেশন.কারেন্ট.শুট ডাউন দিয়ে আপনি অনির্দিষ্টকালের জন্য চলমান অ্যাপ্লিকেশনটি সহজেই শেষ করতে পারেন যদি আপনার কাছে কোড থাকে যা নিজেকে প্রেরণকারীর মধ্যে আবার ঠেলে দেয়।
মার্কাস অ্যান্ড্রেন

অ্যাপ্লিকেশন.এক্সিট (0) এর সমান;
সায়কা

সঙ্গে Application.Current.Shutdown();আমার Closingঘটনা বলা হয়, যখন আমি কেবল হরতাল অবিলম্বে আমার অ্যাপ্লিকেশানের চেয়েছিলেন। সুতরাং Environment.Exit(0);ভাল পছন্দ ছিল।
ফ্রেডএম

64

হিসাবে wuminqi বলেন , Application.Current.Shutdown();অপরিবর্তনীয়, এবং আমি বিশ্বাস করি সাধারণত যেমন যখন একটি ব্যবহারকারী লগ অফ বা ডাউন উইন্ডোজ শাট হয় মাঝে মাঝে ঘনিষ্ঠ একটি আবেদন জোর করতে ব্যবহৃত হয়।

পরিবর্তে, this.close()আপনার মূল উইন্ডোতে কল করুন । এটি উইন্ডোতে Alt+ F4বা ক্লোজ [এক্স] বোতাম টিপানোর মতো। এটি অন্যান্য সমস্ত মালিকানাধীন উইন্ডোজ বন্ধ করে দেবে এবং Application.Current.Shutdown();এতক্ষণ বন্ধ হয়ে যাবে যতক্ষণ বন্ধ কর্মটি বাতিল করা হয়নি। দয়া করে MSDN ডকুমেন্টেশন দেখুন একটি উইন্ডো বন্ধ করা

এছাড়াও, this.close()বাতিলযোগ্য কারণ আপনি সমাপনী ইভেন্ট হ্যান্ডলারের একটি সংরক্ষণ পরিবর্তন কনফার্মেশন ডায়ালগ রাখতে পারেন। কেবল একটি ইভেন্ট হ্যান্ডলার তৈরি করুন <Window Closing="...">এবং সে e.Cancelঅনুযায়ী পরিবর্তন করুন । ( এটি কীভাবে করবেন সে সম্পর্কে আরও তথ্যের জন্য এমএসডিএন ডকুমেন্টেশন দেখুন ))


2
+1 আমি এইটির সাথে যাবার সিদ্ধান্ত নিয়েছি, বিশেষত যেহেতু আসলে অ্যাপ্লিকেশনটি ছাড়ার আগে আমাকে খোলার ফাইলগুলি সংরক্ষণ করা দরকার।
এজেন্টকনফফ

2
এখানে একটি গুরুত্বপূর্ণ বিষয় লক্ষণীয় হ'ল অ্যালেন একটি অত্যন্ত গুরুত্বপূর্ণ সত্যটি নির্দেশ করেছিলেন: অন্য সমস্ত মালিকানাধীন উইন্ডোজ বন্ধ হয়ে যাবে। আপনি মালিকানা ঘোষণা করেছেন তা নিশ্চিত করতে হবে। আপনার যদি উইন্ডোটি চলমান থাকে এবং আপনি অন্য উইন্ডোটি খোলেন তবে এটি এখনও দেখাবেন না, আপনি সক্রিয় উইন্ডোটি বন্ধ করার পরে, লুকানো উইন্ডো অ্যাপ্লিকেশনটিকে চলমান রাখতে বাধ্য করবে। আপনি যদি অন্য মাধ্যমে (টাস্ক ম্যানেজার, ইত্যাদি) মাধ্যমে উইন্ডোটি বন্ধ না করেন তবে আপনার একটি সম্ভাব্য মেমরি ফাঁস হবে। আমি এটি পরীক্ষা করেছি।
বিকে

35

প্রয়োজন অনুযায়ী নিম্নলিখিত যে কোনওটি ব্যবহার করুন:

1।

 App.Current.Shutdown();
OR
 Application.Current.Shutdown();

2।

 App.Current.MainWindow.Close();
OR
 Application.Current.MainWindow.Close();

সর্বোপরি সব পদ্ধতি ডাকব closing eventএর Windowবর্গ ও মৃত্যুদন্ড কিছু সময়ে বন্ধ করতে পারে (কারণ সাধারণত অ্যাপ্লিকেশন সংলাপ করা মত 'আপনি কি নিশ্চিত?' বা ' ব্যাপারে বন্ধ করার আগে ডেটা সংরক্ষণ করতে চান? ', সামনে একটি উইন্ডো সম্পূর্ণরূপে বন্ধ করা হয়)

৩. তবে আপনি যদি কোনও সতর্কতা ছাড়াই আবেদনটি অবিলম্বে বন্ধ করতে চান তবে । নীচে ব্যবহার করুন

   Environment.Exit(0);

25

এই কৌতুক করতে হবে:

Application.Current.Shutdown();

আপনি যদি আগ্রহী হন তবে এখানে কিছু অতিরিক্ত উপাদান যা আমাকে সহায়ক বলে মনে হয়েছে:

আবেদন সম্পর্কিত বিবরণ। বর্তমান

ডাব্লুপিএফ অ্যাপ্লিকেশন লাইফ সাইকেল


18

এখানে আমি কীভাবে করব:

// Any control that causes the Window.Closing even to trigger.
private void MenuItemExit_Click(object sender, RoutedEventArgs e)
{
    this.Close();
}

// Method to handle the Window.Closing event.
private void Window_Closing(object sender, CancelEventArgs e)
{
    var response = MessageBox.Show("Do you really want to exit?", "Exiting...",
                                   MessageBoxButton.YesNo, MessageBoxImage.Exclamation);
    if (response == MessageBoxResult.No)
    {
        e.Cancel = true;
    }
    else
    {
        Application.Current.Shutdown();
    }
}

আমি কেবল Application.Current.ShutDown()মূল অ্যাপ্লিকেশন উইন্ডো থেকে কল করি , অন্য সমস্ত উইন্ডো ব্যবহার করে this.Close()। আমার মূল উইন্ডোতে, Window_Closing(...)উপরের ডান xবোতামটি পরিচালনা করে les যদি কোনও পদ্ধতির উইন্ডোটির কাছাকাছি যাওয়ার জন্য আহ্বান জানায় Window_Closing(...)তবে ব্যবহারকারী নিশ্চিত হয়ে থাকলে ইভেন্টটি বন্ধ করার জন্য ধরেন।

আমি Application.Current.Shutdown()আমার মূল উইন্ডোটিতে প্রকৃতপক্ষে ব্যবহার করার কারণটি হ'ল আমি লক্ষ্য করেছি যে যদি কোনও ডিজাইনের ভুল হয়ে যায় এবং আমি কোনও অ্যাপ্লিকেশনটিতে আমার উইন্ডোর কোনও পিতামাতার নাম ঘোষণা না করে, যদি সেই উইন্ডোটি আগে না দেখানো খোলা থাকে শেষ সক্রিয় উইন্ডোটি বন্ধ হয়ে গেলে, আমি ব্যাকগ্রাউন্ডে একটি গোপন উইন্ডো চলমান রেখেছি। অ্যাপ্লিকেশনটি বন্ধ হবে না। সম্পূর্ণ মেমরি ফাঁস রোধ করার একমাত্র উপায় হ'ল অ্যাপ্লিকেশনটি বন্ধ করার জন্য আমার পক্ষে টাস্ক ম্যানেজারে যাওয়া। Application.Current.Shutdown()অনিচ্ছাকৃত ডিজাইনের ত্রুটিগুলি থেকে আমাকে রক্ষা করে।

এটি আমার ব্যক্তিগত অভিজ্ঞতা থেকে। শেষ পর্যন্ত, আপনার দৃশ্যের জন্য সবচেয়ে ভাল কি ব্যবহার করুন। এটি হ'ল আরও একটি তথ্য।


16

কোনও Application.ShutDown();বা .Exit()বার্তা থাকা উচিত নয় ।

Applicationএকটি স্ট্যাটিক বর্গ। এটি বর্তমান অ্যাপ্লিকেশনটির উল্লেখ করে না। আপনার বর্তমান অ্যাপ্লিকেশনটিতে যেতে হবে এবং তারপরে এটিকে বন্ধ করে দিন:

Application.Current.Shutdown();

8

আপনি এটি করতে পারেন এমন আরও একটি উপায়:

System.Diagnostics.Process.GetCurrentProcess().Kill();

এটি আপনার অ্যাপ্লিকেশনকে মেরে ফেলতে বাধ্য করবে। এটি সর্বদা কাজ করে, এমনকি বহু-থ্রেডযুক্ত অ্যাপ্লিকেশনটিতেও।

দ্রষ্টব্য: অন্য থ্রেডে সংরক্ষিত ডেটাটি হারাতে না যাওয়ার জন্য কেবল সাবধান হন।


এটি বোধগম্য বলে মনে হচ্ছে: "প্রক্রিয়া সর্বদা কাজ করে" । আপনি এটা ঠিক করতে পারবো? বা কমপক্ষে এখানে আপনি কী বোঝাতে চেয়েছেন তা এখানে ব্যাখ্যা করুন?
পিটার মর্টেনসেন

এটি আংশিকভাবে বোধগম্যও নয়: কেবল এমন অ্যাপ্লিকেশনটির বিষয়ে যত্নশীল যা অন্য থ্রেড থেকে ফাইলগুলিতে ডেটা সংরক্ষণ করে। আপনি এটা ঠিক করতে পারবো? বা কমপক্ষে এখানে আপনি কী বোঝাতে চেয়েছেন তা এখানে ব্যাখ্যা করুন?
পিটার মর্টেনসেন

আপনি গুগল অনুবাদ ব্যবহার করছেন?
পিটার মর্টেনসেন

না, আমি বলছি না, যখন অ্যাপ্লিকেশনটি মাল্টি থ্রেড হিসাবে চলমান থাকে এবং আপনি প্রক্রিয়া ব্যবহার করেন ill কিল এটি কাজ করবে, তবে অন্য থ্রেড চলাকালীন মাল্টিথ্রেড অ্যাপ্লিকেশনগুলিতে এইভাবে বন্ধ করুন lo বন্ধ করুন se
আলী ইউসফি 20'18

6
private void _MenuExit_Click(object sender, RoutedEventArgs e)
{
   System.Windows.Application.Current.MainWindow.Close();
}

//Override the onClose method in the Application Main window

protected override void OnClosing(System.ComponentModel.CancelEventArgs e)
{
    MessageBoxResult result =   MessageBox.Show("Do you really want to close", "",
                                          MessageBoxButton.OKCancel);
    if (result == MessageBoxResult.Cancel)
    {
       e.Cancel = true;
    }
    base.OnClosing(e);
}

এটি কেবলমাত্র ডাব্লুপিএফ অ্যাপ্লিকেশনটি কীভাবে প্রস্থান করবেন তা জানতে চান না।
মেহেদি


6

আমার বোঝাপড়া অনুসারে, Application.Current.Shutdown()এর অপূর্ণতাও রয়েছে।

আপনি যদি প্রস্থানকরণে বা না ছাড়ার বিষয়ে ব্যবহারকারীদের নিশ্চিত করতে একটি নিশ্চিতকরণ উইন্ডো প্রদর্শন করতে চান তবে Application.Current.Shutdown()তা অপরিবর্তনীয়।


7
আমি এটা বুঝতে পারি না। আমরা Application.Current.Shutdown()তবে ফোন করার আগে ব্যবহারকারীর নিশ্চয়তা পেতে পারি ।
আমসাকান্না

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

বীর: আমার ক্ষেত্রে, কনফার্মেশন উইন্ডো উপস্থিত হয়, তবে আপনি যখন নিশ্চিতকরণে "বাতিল" চয়ন করেন তখনও প্রধান অ্যাপ্লিকেশনটি প্রস্থান করে।
ওয়ুমিনকি

7
জেটিএস: কেস কেসে কেস ডিজাইন করা আরও ভাল। আমাদের অ্যাপ্লিকেশন, যদি সেখানে কাজ চলছে, ফোর্স প্রস্থানটি ক্ষতির কারণ হবে, তাই আমরা অবশ্যই তাদেরকে নিশ্চিতকরণ সংলাপে অবহিত করা ভাল
ওয়ুমিনকি

3

সংক্ষিপ্তসার, এটি করার কয়েকটি উপায় রয়েছে।

1) প্রক্রিয়াটি হত্যা করা, যা চূড়ান্তকরণ, ত্রুটি পরিচালনা ইত্যাদি ইত্যাদি বাদ দেয়:

Process.GetCurrentProcess().Kill();

2) বর্তমান অ্যাপ্লিকেশনটি বন্ধ করা, এটি সম্ভবত সঠিক উপায় কারণ এটি প্রস্থান ইভেন্টগুলি বলে:

Application.Current.Shutdown();

অথবা

this.Shutdown();

(যখন অ্যাপ্লিকেশন-শ্রেণীর উদাহরণে আটকে থাকে)

3) বর্তমান অ্যাপ্লিকেশনটি বন্ধ করে দেওয়া (সমস্ত ফর্মগুলি আগে / বন্ধ করতে হবে):

this.Close(); 

(যখন অ্যাপ্লিকেশন-শ্রেণীর উদাহরণে আটকে থাকে)

4) পরিবেশটি থেকে বেরিয়ে আসা, যা অ্যাপটিকে সমাপ্ত করে:

Environment.Exit(0);

এছাড়াও, আপনি প্রস্থান স্থিতিগুলি সম্পর্কে এখানে পড়তে চাইতে পারেন


2

ক্যালিবার্ন মাইক্রো স্বাদযুক্ত

public class CloseAppResult : CancelResult
{
    public override void Execute(CoroutineExecutionContext context)
    {
        Application.Current.Shutdown();
        base.Execute(context);
    }
}

public class CancelResult : Result
{
    public override void Execute(CoroutineExecutionContext context)
    {
        OnCompleted(this, new ResultCompletionEventArgs { WasCancelled = true });
    }
}

কি "Caliburn মাইক্রো দান" মানে?
পিটার মর্টেনসেন

ক্যালিবার্ন মাইক্রো ব্যবহার করে আপনি কীভাবে এটি অর্জন করবেন
অ্যান্ডারস

0

আপনি যদি অন্য থ্রেড থেকে প্রস্থান করতে চান যা অ্যাপ্লিকেশন অবজেক্টটি ব্যবহার করে না:

System.Windows.Application.Current.Dispatcher.InvokeShutdown();

-2

Application.Current.ShutdownMode = ShutdownMode.OnExplicitShutdown;


2
তাই, আলফা-লিওনে আপনাকে স্বাগতম! কোড-কেবলমাত্র উত্তরগুলি এখানে নিরুৎসাহিত করা হয়েছে, কারণ তারা কীভাবে সমস্যাটি সমাধান হয়েছিল সে সম্পর্কে কোনও অন্তর্দৃষ্টি দেয় না। আপনার কোডটি কীভাবে ওপি'র সমস্যা সমাধান করে তার ব্যাখ্যা দিয়ে দয়া করে আপনার সমাধানটি আপডেট করুন :)
জোয়েল

-3

এক্সএএমএল কোড থেকে আপনি একটি পূর্বনির্ধারিত সিস্টেমকম্যান্ড কল করতে পারেন:

Command="SystemCommands.MinimizeWindowCommand"

আমি মনে করি এটি পছন্দসই উপায় হওয়া উচিত ...


ছোট করুন! = প্রস্থান অ্যাপ্লিকেশন। আমি সেই তালিকায় একটি প্রস্থান অ্যাপ বিকল্প দেখতে পাচ্ছি না। আরও উইন্ডো পরিচালনা বলে মনে হচ্ছে এবং বন্ধ উইন্ডোটি অগত্যা ক্লোজ অ্যাপ্লিকেশনটি নয়। msdn.microsoft.com/en-us/library/…
কেনে
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.