C # - поток выполнения программы выход / пауза / возобновление - PullRequest
0 голосов
/ 04 сентября 2011

Не могли бы вы сказать мне, пожалуйста, есть ли способ в C # приостановить и возобновить выполнение программы, как я хотел бы сделать ниже?

Или у вас есть идея, как сохранить / загрузить стек вызовов текущего потока?

Я ищу решение, которое вообще не создает новый поток.

public class MyClass : InterruptableClass
{
    int x;

    public void Fn1()
    {
        x = 1;
        this.Interrupt();
        x = 2;
    }
}

static class Program
{
    static void Main()
    {
        MyClass c = new MyClass();

        c.Fn1();
        // Now c.x is 1

        if (c.IsInterrupted)
        {
            c.ResumeExecution();
            // Now c.x is 2
        }
    }
}

К сожалению, я не могу сохранить / перезагрузить стек вызовов (StackTrace / StackFrame).

Ответы [ 2 ]

0 голосов
/ 04 сентября 2011

Возможно, вы захотите взглянуть на ключевое слово await, которое будет введено в следующей версии C #.

Если вам нужно решение сейчас, рассмотрите возможность использования продолжений TPL (метод Task.ContinueWith).

0 голосов
/ 04 сентября 2011

Вы должны посмотреть на потоки и синхронизацию потоков, используя События или Блокировки, в зависимости от того, что подходит для вашего сценария.

Вы можете указать потоку ждать других потоков или ждать, пока какое-либо событие произойдет, используя этимеханизмы, так что пока он на самом деле ожидает, он, скорее всего, (в зависимости от ОС) переключается из контекста, так что другие потоки, имеющие работу, могут фактически продолжать работу.

...