কীভাবে সি # অ্যাপ্লিকেশনটি সঠিকভাবে প্রস্থান করবেন?


196

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

আমি চেষ্টা করেছি Application.Exitকিন্তু এটি এখনও সমস্ত শিশুকে উইন্ডোজ এবং সতর্কতাগুলিতে কল করে এবং আমি কীভাবে ব্যবহার করব Environment.Exitএবং কোনটি পূর্ণসংখ্যার মধ্যে লাগাতে হবে তা আমি জানি না ।

যাইহোক, যখনই আমার ফর্মগুলি formclosedবা form closingইভেন্টটিকে কল করে আমি কোনও this.Hide()ফাংশন দিয়ে অ্যাপ্লিকেশনটি বন্ধ করি ; এটি কীভাবে আমার অ্যাপ্লিকেশনটি এখন আচরণ করছে তা প্রভাবিত করে?


2
ফর্মক্লোজড বা ফর্মস্লোজিং হ্যান্ডেল করবেন না
স্ল্যাকস

1
সুতরাং আপনি বলছেন যে আপনি কেবল ফর্মগুলি বন্ধ করার পরিবর্তে আড়াল করছেন ? এ কারণেই সম্ভবত অ্যাপ্লিকেশনটি শেষ হচ্ছে না, এর এখনও খোলা (লুকানো) ফর্ম রয়েছে।
Xint0

তারপরে আমার এই সমস্তটি প্রতিস্থাপন করা উচিত H
জন আর্নেস্ট গুয়াদালাপে

1
আপনার হাইড () বা ক্লোজ () দরকার নেই।
হেন্ক হলটারম্যান

1
বন্ধ কর্ম এবং ইভেন্ট সম্পর্কিত কোড পোস্ট করুন।
হেন্ক হলটারম্যান

উত্তর:


329

এমএসডিএন থেকে:

Application.Exit

সমস্ত বার্তা পাম্পগুলিকে অবহিত করে যে তাদের অবশ্যই শেষ করতে হবে এবং বার্তাগুলি প্রক্রিয়া করার পরে সমস্ত অ্যাপ্লিকেশন উইন্ডো বন্ধ করে দেয়। আপনাকে যদি অ্যাপ্লিকেশন বলা হয় তবে এটি ব্যবহার করার কোড।

Environment.Exit

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

এই নিবন্ধটি, অ্যাপ্লিকেশন.এক্সিট বনাম পরিবেশ.এক্সিট , একটি ভাল টিপের দিকে নির্দেশ করে:

সম্পত্তি System.Windows.Forms.Application.Runযাচাই করে ফোন করা হয়েছে কিনা তা আপনি নির্ধারণ করতে পারেন System.Windows.Forms.Application.MessageLoop। যদি সত্য হয়, তবে রানকে ডেকে আনা হয়েছে এবং আপনি ধরে নিতে পারেন যে উইনফর্মস অ্যাপ্লিকেশনটি নিম্নলিখিত হিসাবে কার্যকর হচ্ছে।

if (System.Windows.Forms.Application.MessageLoop) 
{
    // WinForms app
    System.Windows.Forms.Application.Exit();
}
else
{
    // Console app
    System.Environment.Exit(1);
}

তথ্যসূত্র: অ্যাপ্লিকেশন.এক্সিট কাজ করতে ব্যর্থ হবে কেন?


এটি আমার জন্য সত্যই কার্যকর ছিল কারণ আমার একটি উইনফর্মস অ্যাপ্লিকেশন ছিল যার একটি যুক্তি ছিল যাতে এটি নিঃশব্দে চলতে পারে এবং তাই কোনও ফর্ম প্রদর্শন করে না। ফর্মটি যখন লুকানো ছিল তখন Application.Exit()অ্যাপটি থেকে বেরিয়ে আসতে ব্যর্থ হয়েছিল , তবে Environment.Exit(1)মনোহর মতো কাজ করেছিল।
ডিব

5
কোনও ত্রুটির কারণে প্রশ্নটি প্রস্থান করার কথা উল্লেখ করে নি, সুতরাং প্রস্থান কোডটি শূন্য হওয়া উচিত: Environment.Exit(0) কোনও শূন্য নয় এমন মান বলতে বোঝায় কোনও অ্যাপ্লিকেশন-নির্দিষ্ট ত্রুটি কোড যা কোনও স্ক্রিপ্ট দ্বারা যথাযথ ব্যবস্থা গ্রহণের জন্য ব্যবহার করা যেতে পারে। (এটি একটি নতুন কোড এবং একটি উইনফর্মস অ্যাপ্লিকেশন, সুতরাং এই ক্ষেত্রে এটি বিবেচ্য হওয়ার সম্ভাবনা কম তবে কমান্ড-লাইন সরঞ্জাম লেখার জন্য কারও পক্ষে জানা ভাল))
YipYip

Environment.Exitফর্ম প্রয়োগের জন্যও ব্যবহার করা যেতে পারে।
বদিপারমাগি

1
আমি ভুল হলে আমাকে সংশোধন করুন তবে আমি মনে করি returnএরপরে একটি বিবৃতি এই পদ্ধতির অনেক উন্নতি করবে। আমি বুঝতে পেরেছি কোডটি Application.Exit()একটি returnবিবৃতি না হওয়া পর্যন্ত কার্যকর করা চালিয়ে যাবে ।
আলোকিত 19

17

আমি জানি যে এটি আপনার সমস্যা ছিল না, তবে এটির কারণ হতে পারে এমন আরও একটি কারণ হ'ল আপনার অ্যাপ্লিকেশনটিতে আপনার একটি ব্যাকগ্রাউন্ড থ্রেড খোলা আছে।

using System;
using System.Threading;
using System.Windows.Forms;

namespace Sandbox_Form
{
    static class Program
    {
        private static Thread thread;

        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);

            thread = new Thread(BusyWorkThread);
            thread.IsBackground = false;
            thread.Start();

            Application.Run(new Form());

        }

        public static void BusyWorkThread()
        {
            while (true)
            {
                Thread.Sleep(1000);
            }
        }
    }
}

যখন IsBackgroundহয় falseএটা আপনার প্রোগ্রাম থ্রেড সম্পন্ন হয়ে পর্যন্ত খোলা রাখা হবে, যদি আপনি নির্ধারণ IsBackgroundকরতে trueথ্রেড প্রোগ্রাম খোলা না রাখা হবে। ভীষণ পছন্দ BackgroundWoker, ThreadPoolএবং Taskসব অভ্যন্তরীণভাবে সহ কোনো থ্রেড ব্যবহার IsBackgroundকরার জন্য সেট true


14

তোমার যা দরকার তা হল System.Environment.Exit(1);

এবং এটি "নামক সিস্টেম" ব্যবহার করে সিস্টেমের নাম স্থানটি ব্যবহার করে যা আপনি যখন কোনও প্রকল্প শুরু করেন তখন সবসময় সেখানে থাকে।


2
এটি কনসোল অ্যাপ্লিকেশনগুলির জন্য আরও উপযুক্ত।
নিধিন ডেভিড

নোটটিতে একটা জিনিষ FormClosing হয় / FormClosed ঘটনা Environment.Exit জন্য বলা হবে না এছাড়াও exitCode শুধুমাত্র অশূন্য হওয়া উচিত একটি ত্রুটি, ঘটেছে
রাফায়েল Smit

9

আমি নিম্নলিখিতগুলির একটি হয়:

Application.Exit ();

একটি উইনফর্মের জন্য বা

Environment.Exit (0);

কনসোল অ্যাপ্লিকেশনটির জন্য (উইনফর্মগুলিতেও কাজ করে)।

ধন্যবাদ!


পরিবেশ।
মুলওনে

8

যাইহোক। যখনই আমার ফর্মগুলি ফর্মক্লোসড বা ফর্ম বন্ধের ইভেন্টটিকে কল করে আমি এটিকে লুকিয়ে রাখি H লুকান () ফাংশন দিয়ে। এটি কীভাবে আমার অ্যাপ্লিকেশনটি এখন আচরণ করছে তা প্রভাবিত করে?

সংক্ষেপে, হ্যাঁ যখন মূল ফর্ম (ফর্ম মাধ্যমে শুরু সমগ্র আবেদন শেষ হয়ে যাবে Application.RunMainপদ্ধতি) বন্ধ করা হয় (লুকানো নয়)।

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

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


3

কি কর:

Application.Run(myForm);

আপনার মেইনে ()?

ফর্মটি বন্ধ হয়ে গেলে অ্যাপ্লিকেশনটি মেরে ফেলার খুব সহজ উপায় আমি পেয়েছি।


1
হ্যাঁ এটিতে মূল অ্যাপ্লিকেশন রয়েছে Main মূলত প্রোগ্রামটি। এটি বন্ধ করার জন্য আমি কী করব?
জন আর্নেস্ট গুয়াদালাপে

তবে আপনি কি আপনার মূল ফর্মটি রানের দিকে চলে যান, তাই না? ফর্মটি আপনি ঘনিষ্ঠ লাল এক্স-এ ক্লিক করে
LightStriker

হ্যাঁ আমার এটা আছে স্যার। এটি এর মতো: অ্যাপ্লিকেশন.আর (নতুন ফর্ম 2 ());
জন আর্নেস্ট গুয়াদালাপে

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


-4

এই ক্ষেত্রে, App.xaml.cs- এ অ্যাক্সিট () পদ্ধতিতে ওভাররাইড করতে অ্যাপ্লিকেশন থেকে প্রস্থান করার সবচেয়ে সঠিক উপায়:

protected override void OnExit(ExitEventArgs e) {
    base.OnExit(e); 
}

এটি যখনই কোনও প্রস্থান ইভেন্ট ঘটে তখনই আপনি কোডটি কার্যকর করতে পারবেন, কিন্তু বাস্তবে প্রস্থান ইভেন্টটি ঘটে না।
jpaugh
আমাদের সাইট ব্যবহার করে, আপনি স্বীকার করেছেন যে আপনি আমাদের কুকি নীতি এবং গোপনীয়তা নীতিটি পড়েছেন এবং বুঝতে পেরেছেন ।
Licensed under cc by-sa 3.0 with attribution required.