LINUX.ORG.RU

С# выход из main


0

0

Есть примерно такая программа на csharp:

class Program
{
    static void Main(string[] args)
    {
        MyClass obj = new MyClass(args);
    }	
    public class MyClass
    {
    .....
    }
}
Подскажите плиз, как красиво и правильно сделать, чтоб оно не выходило из main (не завершалось), пока obj не решит что пора. Программа какое-то длительное время будет активно использоваться, пока не напишу замену одной либе на C++, потому хочу чтоб все было гуд. Делегат, евент? Заранее благодарен.

★★★★★

Складывается впечатления о принципиальном непонимании топикстартером используемого инструмента.

Begemoth ★★★★★
()
Ответ на: комментарий от Begemoth

Складывается впечатления о принципиальном непонимании топикстартером используемого инструмента.

Очень близко к истине, кодю обычно на C++, делегаты и евенты в sharp для меня что-то новое, потому не очень понимаю что с их помощью можно а что нет, да и докучи после недели, запойного программирования на нескольких языках (c++, csharp, javascript и lsl, а они очень разные) туго соображаю, однако осталось осталось добить, но я уже на исходе сил((((

erfea ★★★★★
() автор топика
Ответ на: комментарий от erfea

по сабжу, если несу бред про выход из main по евенту (я с чего-то взял что это было бы красиво), так мне и скажите, вопрос отпадет, буду очень блягодарен.

erfea ★★★★★
() автор топика

короч сделал, как обычно в плюсах, без изысков, видать мозг совсем уплыл, надо поспать...

erfea ★★★★★
() автор топика
Ответ на: комментарий от erfea

events больше расчитаны на диалог с пользователем (нажал кнопочку),
а делегаты тут не при чем, насколько я понимаю

oh
()

У тебя там поток создается что ли, в ТвоёмКлассе?

gizzka ★★
()
Ответ на: комментарий от Eddy_Em

Я не понимаю, какое отношение к ЛОРу имеют вантузные темы. И mono в линуксе не место.

сделай аналог (достойный) omvlib за два дня, монокод выкину сразу... будет время сделаю нормальную С++ прогу.

erfea ★★★★★
() автор топика
Ответ на: комментарий от NightmareZz

Тупо цикл же. И отдавать ненужное время путём, например, System.Threading.Thread.Sleep(0);

уже сделал именно так

erfea ★★★★★
() автор топика

мля а как сделать что при убийсте процесса, вызывался гребанный деструктор obj?

erfea ★★★★★
() автор топика
Ответ на: комментарий от erfea

мля а как сделать что при убийсте процесса, вызывался гребанный деструктор obj?

Если хочешь детерминиронного уничтожения объектов, реализуй в их классе (классах) интерфейс IDisposable и дёргай его.

Твой код:

class Program 
{ 
    static void Main(string[] args) 
    { 
        MyClass obj = new MyClass(args); 
    }
 
    public class MyClass 
    { 
    ..... 
    } 
}

Реализуем IDisposable

class Program 
{ 
    static void Main(string[] args) 
    { 
        using (MyClass obj = new MyClass(args))
        {
            ......
        }
        // после выхода из области видимости оператора using,
        // будет вызван Dispose()
    }
 
    public class MyClass : IDisposable
    { 
    ..... 
        public void Dispose()
        {
            // то, что ты хотел делать в деструкторе
        }
    } 
}

Этот код аналогичен вот этому

class Program 
{ 
    static void Main(string[] args) 
    {
        MyClass obj = new MyClass(args);
        try
        {
         ..........
        }
        finally
        {
            obj.Dispose();
        }
    }
 
    public class MyClass : IDisposable
    { 
    ..... 
        public void Dispose()
        {
            // то, что ты хотел делать в деструкторе
        }
    } 
}

NightmareZz
()
Ответ на: комментарий от erfea

мля а как сделать что при убийсте процесса, вызывался гребанный деструктор obj?

Если же ты хочешь убивать процесс извне и при этом чтобы дёргался деструктор, попробуй посмотреть события класса Application. Там что-то было похожее. Я не помню, а искать мне лень.

NightmareZz
()
Ответ на: комментарий от NightmareZz

Если же ты хочешь убивать процесс извне и при этом чтобы дёргался деструктор, попробуй посмотреть события класса Application. Там что-то было похожее. Я не помню, а искать мне лень.

еще спрашиваю он часом к гуям отношения не имеет, и если нет то где доку искать?

erfea ★★★★★
() автор топика
Ответ на: комментарий от Eddy_Em

>Я не понимаю, какое отношение к ЛОРу имеют вантузные темы. И mono в линуксе не место.
Что ты за свою жизнь сделал, школьник, раз можешь решать что линуксу нужно, а что нет? Дай угадаю, насрал тысячи постов на ЛОРе?

anotheranonymous
()

И все же, хдесь целая тьма фанатов этого сраного моно, и что никто не скажет как мне обработать kill?! Пипец мля, что может быть прощу чем корректо убить объект? В моно это целая задача мля!!!

erfea ★★★★★
() автор топика
Ответ на: комментарий от oh

Да, видимо я был пьян. Прошу прощение за затуп.

urxvt ★★★★★
()
Ответ на: комментарий от erfea

И все же, хдесь целая тьма фанатов этого сраного моно, и что никто не скажет как мне обработать kill?! Пипец мля, что может быть прощу чем корректо убить объект? В моно это целая задача мля!!! Да нет, там все просто, просто ты балбес.

UnixSignal[] signals = new UnixSignal [] {
    new UnixSignal (Mono.Unix.Native.Signum.SIGINT),
    new UnixSignal (Mono.Unix.Native.Signum.SIGUSR1),
};
 
Thread signal_thread = new Thread (delegate () {
    while (true) {
        int index = UnixSignal.WaitAny (signals, -1);
 
        Mono.Unix.Native.Signum signal = signals [index].Signum;
 
	Application.Invoke (delegate () { ReceivedSignal (signal); }
    });

anotheranonymous
()
Ответ на: комментарий от anotheranonymous

это уже похоже что-то дельное, благодарю, будем ковырять

erfea ★★★★★
() автор топика

Запусти отдельный поток, делов то...

aldayneko
()
Вы не можете добавлять комментарии в эту тему. Тема перемещена в архив.