PDA

View Full Version : خاتمه دادن به برنامه



alireza_tavakol
چهارشنبه 11 مهر 1386, 01:01 صبح
به نظر دوستان چند روش برای خاتمه دادن به برنامه در حال اجرا وجود دارد
و کدام روش حرفه ای تر از بقیه می باشد

hassan razavi
چهارشنبه 11 مهر 1386, 01:28 صبح
من 2 از 2 روش استفاده میکنم:
1-


Application.Exit()

2- بستن فرم اصلی برنامه

بنظر من گزینه اول اصولی تر هست

PC2st
چهارشنبه 11 مهر 1386, 01:58 صبح
به نظر من هم متد Application.Exit اصولی است...

البته این هم هست (که روش مناسبی نیست!)


System.Threading.Thread.CurrentThread.Abort();

hdv212
چهارشنبه 11 مهر 1386, 08:45 صبح
در مواقعی هم که برنامه با Application.Exit fi به درستی خارج نمیشه (مثل زمانهایی که با رویداد Closed یا Colsing فرم اصلی کار میکنی و من خیلی باهاش برخورد داشتم) میتونی از این تابع هم استفاده کنی :

Application.ExitThread();

mohammad272005
پنج شنبه 12 مهر 1386, 02:25 صبح
همیشه Abort کردن یه Thread باعث می‏شه که bufferش درت خالی نشه یعنی گاهی اطلاعات از دست رفته خواهیم داشت. مطمئننا بهترین را بستن فرم اصلی با Close هست.

hdv212
پنج شنبه 12 مهر 1386, 02:45 صبح
همیشه Abort کردن یه Thread باعث می‏شه که bufferش درت خالی نشه یعنی گاهی اطلاعات از دست رفته خواهیم داشت. مطمئننا بهترین را بستن فرم اصلی با Close هست.
دوست عزیز من هم با شما موافقم ولی بعضی وقتها که مثالشو زدم مثل کار با رویدادهای بسته شدن فرم اصلی برنامه که ممکنه توی یه حلقه بیفته، تنها راه خارج شدن برنامه ExitThread() هست.

mohammadkhan
دوشنبه 30 مهر 1386, 19:47 عصر
شرمنده که تو بحث اساتید میپرم
بهترین راه همون زدن دکمه ضربدر گوشه فرمه
مگه اینکه فرم بردر استایل none باشه

RED-C0DE
دوشنبه 30 مهر 1386, 21:36 عصر
بهترین راه همون زدن دکمه ضربدر گوشه فرمه
شما فکر می کنین با زدن دگمه ضربدر گوشه فرم چه رویدادی فراخونی می شه؟!؟!؟!؟!؟

PC2st
دوشنبه 30 مهر 1386, 21:39 عصر
بهترین راه همون زدن دکمه ضربدر گوشه فرمه
موضوع این تاپیک، نحوه خاتمه دادن توسط کدهای برنامه نویسی است نه کاری که کاربر انجام میدهد :-) همچنین با کلیک روی علامت ضربدر، مثل وقتی است که متد Close از فرم رو صدا بزنیم.

hassan razavi
دوشنبه 30 مهر 1386, 22:09 عصر
رویداد Closing فراخوانده میشه

mehdi.mousavi
دوشنبه 30 مهر 1386, 22:16 عصر
به نظر دوستان چند روش برای خاتمه دادن به برنامه در حال اجرا وجود دارد و کدام روش حرفه ای تر از بقیه می باشد

سلام.
کاش سوال اصلی رو می پرسیدید و اینقدر کلی مساله رو مطرح نمی کردید. منظورتون از حرفه ای خاتمه دادن برنامه چیه؟ روشی که یکی از دوستان مطرح کردن، یعنی زدن ضربدر Box، اگر چه در لحظه اولیه اندکی ساده انگارانه به نظر میرسه، اما واقعیت اینه که کاملا صحیحه. واقعیت اینه که برنامه های GUI نیازی به چنین امکانی ندارن. از طرفی NT-Service ها هم Control Code های مشخص خودشون رو میگیرن تا بفهمن که باید به کارشون خاتمه بدن. تنها حالتی که ممکنه نیاز به اتمام اجرای یه برنامه از طریق کد باشه، وقتی هستش که کاربر آیتم Exit از منوی فایل رو بزنه. تو این حالت هم شما کاید ALT-F4 رو به اون Menu Item تخصیص دادین، در نتیجه نیازی به انجام کار خاصی نیست. اما اگر واقعا این کار رو باید انجام بدین، از Application.Exit استفاده کنید و البته از Overload دوم، یعنی اونی که CancelEventArgs میگیره. به این ترتیب، این فرصت رو به کاربر میتونید بدید که اگر خواست بتونه عمل خارج شدن از برنامه رو Cancel کنه. زدن متود زیر، باعث میشه تا کلیه Message Pump های برنامه از عملیات خروج مطلع بشن و البته، متود OnFormClosing برای هر یک از اونها فراخوان میشه. پارامتر ارسالی به این متود تعیین میکنه که خروج از برنامه به چه دلیل بوده. (به CloseReason تو MSDN نگاه کنید).

اما اینها مشکل واقعی نیست. در واقع شما باید از Modeling خاصی پیروی کنید، تا هنگام خروج از برنامه بتونید بتونید کلیه مدلهای تخصیص یافته به فرمهای باز رو از عمل بسته شدن فرم اصلی مطلع کنید و از اونها استعلام کنید که آیا مجاز به خروج از فرم هستید یا خیر. به این ترتیب میتونید به کاربر پیامی با مضمون زیر بدید:

The document has been changed. Do you want to save the document?

و کاربر میتونه بگه Yes، No و یا Cancel. اگر Cancel کرد، اونوقت شما هم باید بسته شدن برنامه رو منتفی بدونید و CancelEventArgs فوق الذکر رو برابر مقدار مربوطه قرار بدید.

هر وقت کلیه مدلها با عمل خارج شدن از برنامه موافقت کردن، اونوقت شما هم میتونید عملیات Clean-up رو انجام بدین و از برنامه خارج بشین. (این کاری هستش که حرفه ای ها میکنن).

در هر حال، استفاده از ExitThread، Abort، TerminateThread و ... که باعث متوقف کردن یکباره Thread و عدم آزادسازی Resource های گرفته شدن توسط اون Thread میشه، رو مطلقا توصیه نمیکنم. این عمل، مشکلات متعدد دیگه ای بهمراه داره که از حوصله این بحث خارجه.

amir_pro
پنج شنبه 27 دی 1386, 17:45 عصر
دوست عزیز جناب mehdi6755
لطف می کنید کدی را که موجب دادن پیغام هنگام خارج شدن از برنامه می شود را بنویسید؟
با تشکر

13601360
پنج شنبه 27 دی 1386, 18:47 عصر
DialogResult Result =
MessageBox.Show("Save change to Document?", "Text Editor",
MessageBoxButtons.YesNoCancel,
MessageBoxIcon.Warning);