Ожидание ввода текста без остановки программы

72
05 января 2022, 13:00

В моей программе есть вкладка, где я могу написать и запустить код. При его запуске, появляется окошко с двумя TextBox'ами, в первом вывод, а во втором ввод информации.
Для ввода информации, мне нужно сделать свои методы Read и ReadLine. Но столкнулся с проблемой, так как не знаю, как ожидать ввод информации в TextBox, без остановки всей программы.
Вот мой код:

namespace PipeConsole {
    public partial class Form3 : Form {
        public static bool WaitingForRead { get; set; }
        public static string Input { get; set; }
        public static CompilerResults Results { get; set; }
        public Form3 (string source) {
            InitializeComponent ();
            CSharpCodeProvider codeProvider = new CSharpCodeProvider ();
            CompilerParameters parameters = new CompilerParameters ();
            parameters.ReferencedAssemblies.Add (typeof (MethodsForConsolePipe.Chat).Assembly.Location);
            parameters.GenerateExecutable = true;
            Results = codeProvider.CompileAssemblyFromSource (parameters, source);
            Results.CompiledAssembly.GetType ("ConsolePipe").InvokeMember ("Main", BindingFlags.InvokeMethod | BindingFlags.Static | BindingFlags.NonPublic, null, null, null); 
        }
        //Компилируется и запускается код из консоли
        private void KeyPressed (object sender, KeyEventArgs e) {
            if (e.KeyCode == Keys.Enter && !e.Shift && WaitingForRead) {
                WaitingForRead = false;
                Input = (sender as TextBox).Text;
            }
        } 
        //Обработка нажатия клавиш в textBox
    }
    public class Console {
        public static string ReadLine () {
            Form3.WaitingForRead = true;
            //Тут должен ожидаться ввод
            return Form3.Input;
        }
    }
}

Как мне кажется, так как KeyPressed и Console.ReadLine у меня в одном потоке, а нужно что бы они работали синхронно, то нужно что-то сделать именно с потоками или пулом потоков. Но мне ничего в голову не пришло. Надеюсь Вы поможете. Заранее спасибо!

Вот обработка ввода:

       private void KeyPressed (object sender, KeyEventArgs e) {
            if (e.KeyCode == Keys.Enter && !e.Shift && WaitingForRead) {
                WaitingForRead = false;
                Input = textBox1.Text;
            }

    public class ConsoleP {
        public static string ReadLine () {
            Form3.WaitingForRead = true;
            while (Form3.WaitingForRead)
                Thread.Sleep (5);
            return Form3.Input;
        }
    }
READ ALSO
Поможете дописать авто-редирект при успешной оплате?

Поможете дописать авто-редирект при успешной оплате?

В данный момент при любом статусе оплаты или ее стадии осуществляется редирект на нужную страницу и все ок, но только при клике на "вернуться...

191
Как можно обезопасить метод удаления данных?

Как можно обезопасить метод удаления данных?

Есть следующий код, задача которого удалить данные из бдСейчас все данные удаляются при переходе по ссылке localhost/?id=666

237
Время полуночи текущей даты в секундах UnixTimestamp

Время полуночи текущей даты в секундах UnixTimestamp

Необходимо на получить время полуночи текущей даты (например, 1812

98