powered by simpleCommunicator - 2.0.36     © 2025 Programmizd 02
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Почему оно не хочет если может?
4 сообщений из 4, страница 1 из 1
Почему оно не хочет если может?
    #40015047
iskatelsql
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Понадобилось определять нажатие кнопок на клавиатуре.
написал:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            Task t = new Task(start, TaskCreationOptions.LongRunning);
            t.Start();
            t.Wait();
        }


        static void start()
        {
            while (true)
            {
                if ((Keyboard.GetKeyStates(Key.P) & KeyStates.Down) > 0)
                {
                   ...   
                }
                Thread.Sleep(100);
            }
        }
    }
}



На это дело ругается: Вызывающим потоком должен быть STA, поскольку этого требуют большинство компонентов UI
Вопрос причем тут вообще UI, если приложение консольное?

переписал так:

Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
10.
11.
12.
13.
14.
15.
16.
17.
18.
19.
20.
21.
22.
23.
24.
25.
26.
27.
namespace ConsoleApp1
{
    class Program
    {
        static void Main(string[] args)
        {
            Task t = new Task(start, TaskCreationOptions.LongRunning);
            t.Start();
            t.Wait();
        }

        [DllImport("user32.dll")]
        static extern short GetKeyState(int nVirtKey);

        static void start()
        {
            while (true)
            {
                if ((GetKeyState(80) & 0x8000) == 0x8000)
                {
                 ...
                }
                Thread.Sleep(100);
            }
        }
    }
}



и все работает... Так почему через обертку "System.Windows.Input.Keyboard" не хочет?
...
Рейтинг: 0 / 0
Почему оно не хочет если может?
    #40015050
fkthat
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Ну значит обертка там так устроена. Посмотри просто внутри каким-нибудь декомпилятором.

UI при том,что ты используешь класс из WPF (WPF ведь?), который на использование в консольном приложении не расчитан (или, по крайней мере, может быть не расчитан).

Хочешь в консоли ловить нажатие кнопки - используй Console.ReadKey() .
...
Рейтинг: 0 / 0
Почему оно не хочет если может?
    #40015130
Сон Веры Павловны
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
Вот здесь оно вылетает. С комментарием:
Код: c#
1.
2.
3.
4.
5.
6.
7.
8.
9.
// STA Requirement
//
// Avalon doesn't necessarily require STA, but many components do.  Examples
// include Cicero, OLE, COM, etc.  So we throw an exception here if the
// thread is not STA.
if(Thread.CurrentThread.GetApartmentState() != ApartmentState.STA)
{
  throw new InvalidOperationException(SR.Get(SRID.RequiresSTA));
}
...
Рейтинг: 0 / 0
Почему оно не хочет если может?
    #40015299
Roman Mejtes
Скрыть профиль Поместить в игнор-лист Сообщения автора в теме
Участник
UI это не графический интерфейс, UI это пользовательский интерфейс, то есть некая система позволяющая взаимодействовать с пользователем. Даже 4 светодиода и 1 кнопка, это UI
...
Рейтинг: 0 / 0
4 сообщений из 4, страница 1 из 1
Форумы / WinForms, .Net Framework [игнор отключен] [закрыт для гостей] / Почему оно не хочет если может?
Целевая тема:
Создать новую тему:
Автор:
Закрыть
Цитировать
Найденые пользователи ...
Разблокировать пользователей ...
Читали форум (0):
Пользователи онлайн (0):
x
x
Закрыть


Просмотр
0 / 0
Close
Debug Console [Select Text]