C# Потоки. Ввод данных и не корректное отображение

73
14 ноября 2021, 17:40

Создал второй поток для отображения нажатой клавиши НО Первая обработка происходит с Main потока, а со второго никакой информации, и только после второго нажатия выводит уже со второго потока а с Main не обрабатывает. Будто синхронно работает Сначала в мейн потом в другом. Как фиксить?

    using System;
    using System.Threading;
    //using System.Timers;
    namespace ConsoleSnake
    {
        public class Params
        {
            int x;
            int y;
            public Params(int x,int y)
            {
                this.x = x;
                this.y = y;
            }
            public int GetX()
            {
                return this.x;
            }
            public int GetY()
            {
                return this.y;
            }
        }
        class Program
        {
            public static void keylogger() //Функция в потоке . Второй клик обработка тут
            {
                ConsoleKeyInfo keyinfoo;
                do
                {
                    keyinfoo = Console.ReadKey();
                    Console.WriteLine(keyinfoo.Key + " was pressed");
                }
                while (keyinfoo.Key != ConsoleKey.X);
            }
            public static void timerexec(object tets)
            {
                Params p = tets as Params;
                int X = p.GetX(); 
                int Y = p.GetY();
                Console.Clear();
                for (int f = 0; Y > f; f++)
                {
                    for (int i = 0; X > i; i++)
                    {
                        Console.Write("0");
                    }
                    Console.WriteLine();
                }
            }
            static void Main(string[] args)
            {
                Thread kl = new Thread(keylogger);
                kl.Start(); //Поток с кейлогером
                kl.IsBackground = false;
                TimerCallback tc = new TimerCallback(timerexec); 
                Params pa = new Params(50, 20);
                Timer ti = new Timer(tc,pa,0,1000);
                ConsoleKeyInfo keyinfo = new ConsoleKeyInfo();
                do
                {
                    keyinfo = Console.ReadKey();
                }
                while (keyinfo.Key != ConsoleKey.X); //Первый клик обработка тут
            }
        }
    }
READ ALSO
ZeroConf c# iOS не видит сервер

ZeroConf c# iOS не видит сервер

Использую этот приведенный код для публикации сервера с помощью ZeroConf

291
Аналог LIKE (поиск подстроки) в LINQ

Аналог LIKE (поиск подстроки) в LINQ

Как переделать данный запрос, чтобы было что-то вроде

124
Описание методов в отдельном классе или классе формы C#

Описание методов в отдельном классе или классе формы C#

Если я создаю программу, которая читает данные сxml документа, стоит ли кидать методы работающие со значениями из документа в отдельный класс?...

81
Как получить в представлении IQueryable<>?

Как получить в представлении IQueryable<>?

Я пробовал писать вот так

202