Este posibil ca programul în sine să nu fie aproape când forma principală se închide?

Știu că a fost posibil să se facă acest lucru în VB.NET, dar nu pot afla cum în C #. Cum ar face-o aici?

2
Cum ați făcut-o în VB.NET? De cele mai multe ori, există o corespondență directă cu C ...
adăugat autor Cameron, sursa
@Cameron este o setare în fila Aplicație. Așa mi-a spus prietenul meu (care este cu adevărat bun la VB.NET), oricum.
adăugat autor Minicl55, sursa
@ Cameron A spus așa. Dar a făcut un program exact ca cel pe care îl fac și a spus că așa a făcut-o.
adăugat autor Minicl55, sursa
@ Minicl55: Ți-a spus sau ți-a arătat și tu.
adăugat autor Nikhil Agrawal, sursa
duplicat posibil din C# Lucrul cu formulare mutliple
adăugat autor Hans Passant, sursa

3 răspunsuri

Puteți modifica rutina Main (Punctul de intrare al programului) în Program.cs (implicit) pentru a utiliza Application.Run() .

Alternativ, puteți să vă specificați propriul ApplicationContext și să înlocuiți

OnMainFormClosed pentru a oferi un comportament diferit de închiderea automată.

3
adăugat
@ Minicl55 Overriding ApplicationContext cu propriul dvs. vă permite să faceți tot ce doriți. Alternativ, puteți avea forma principală, dar rămâneți ascunsă până când formularul dvs. secundar o face vizibilă ...
adăugat autor Reed Copsey, sursa

Puteți ascunde formularul și puteți plasa o pictogramă în bara de sistem. Suprascria evenimentul de închidere și ascunde-l în schimb, apoi să-l arate atunci când utilizatorul face clic pe pictograma tavă, de exemplu.

More info on the closing event and how to cancel the close: http://msdn.microsoft.com/en-us/library/system.windows.forms.form.closing.aspx

1
adăugat

Ar fi suficient să începeți un nou Thread pentru a face ceea ce sugerați, dar nu sunt sigur că acest lucru ar satisface scopul dvs.

EDITAȚI | ×:

Un exemplu de tehnică pe care o sugerez:

using System;
using System.Collections.Generic;
using System.Windows.Forms;
using System.Threading;

namespace HangApp
{
    static class Program
    {
        /// 
/// The main entry point for the application. ///
 
        [STAThread]
        static void Main()
        {
            Application.EnableVisualStyles();
            Application.SetCompatibleTextRenderingDefault(false);
            Application.Run(new Form1());
            Runner r = new Runner();
        }

        class Runner
        {
            internal Runner()
            {
                _start = DateTime.Now;
                Thread t = new Thread(ThreadStart);
                t.Start();
            }
            DateTime _start;
            void ThreadStart()
            {
                while (true)
                {
                   // some stuff to do
                    if (ExitConditionMet())
                    {
                        break;
                    }
                }
            }

            bool ExitConditionMet()
            {
               // will run the app for 5 seconds after main form was closed
                return (DateTime.Now - _start).TotalSeconds > 5;
            }
        }
    }
}

BTW, codul de mai sus este doar o demonstrație, nu ar trebui niciodată:

  • face un fir care nu face nimic într-o buclă strânsă
  • începe un fir într-un constructor de clasă
0
adăugat
Firele nu sunt cu adevărat relevante pentru această întrebare.
adăugat autor Ry-, sursa
Nu, de fapt nu răspunde nici la această întrebare. Într-adevăr.
adăugat autor Ry-, sursa
Îmi dau seama de asta, dar nu cred că asta este întrebarea. (Ei bine, cel puțin nu mi-am spus că nu sunt așa de sigur.)
adăugat autor Ry-, sursa
@minitech Cred că sugestia a fost să vă puneți logica într-un fir separat (fără fundal), care va continua să funcționeze chiar și după închiderea formularului.
adăugat autor Reed Copsey, sursa
În forma actuală a întrebării TITLE, ele sunt un răspuns direct la aceasta.
adăugat autor Daniel Mošmondor, sursa
În realitate. Am încercat chiar asta. Știu asta deoarece am ocazional suferă de fire rătăcite neterminate. :)
adăugat autor Daniel Mošmondor, sursa