214 / 210 / 146
Регистрация: 20.11.2014
Сообщений: 1,161
1

Запуск потока по кнопке

03.02.2015, 15:49. Показов 1374. Ответов 17
Метки нет (Все метки)

Author24 — интернет-сервис помощи студентам
C#
1
2
3
4
5
6
7
8
9
if (e.KeyCode == Keys.W)
            {
                Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                socket.Connect(IPAddress.Parse("192.168.0.15"), 80);
                socket.Send(new byte[] { 16, 18, 17, 18 });//старт
                Thread.Sleep(200);
                socket.Send(new byte[] { 16, 19, 17, 19 });//стоп
                socket.Disconnect(false);
            }
Есть такой кусок кода, при нажатии на W посылаем команду на старт, через промежуток тормозим. Как реализовать, чтобы пока держим W посылалось socket.Send(new byte[] { 16, 18, 17, 18 });, как только отпускаем W, отправилось единажды socket.Send(new byte[] { 16, 19, 17, 19 });
0
Лучшие ответы (1)
Programming
Эксперт
94731 / 64177 / 26122
Регистрация: 12.04.2006
Сообщений: 116,782
03.02.2015, 15:49
Ответы с готовыми решениями:

Создание потока thread по кнопке,задание приоритета и отслеживание по прогресс-бару
<a target="_blank" href="http://***********"><img...

Запуск и отключение потоков по кнопке
Я пишу небольшую программу для опроса прибров по COM-порту и запихиваю все полученное в базу. Опрос...

Запуск и оставка цикла While по кнопке
Доброго времени суток ! Такое дело, нужно создать цикл while, чтобы он прорабатывал определенный...

Запуск формы по кнопке с клавиатуры
Здравствуйте, такой вопрос: Делаю простое приложение (телефонный справочник). Самый удобный вариант...

17
Master of Orion
Эксперт .NET
6100 / 4956 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
03.02.2015, 17:09 2
bbq, написать цикл?..
C#
1
2
3
4
5
6
7
8
9
10
11
12
if (e.KeyCode == Keys.W)
            {
                Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                socket.Connect(IPAddress.Parse("192.168.0.15"), 80);
                while(isPressed)
                {
                   socket.Send(new byte[] { 16, 18, 17, 18 });//старт
                   Thread.Sleep(200);
                }
                socket.Send(new byte[] { 16, 19, 17, 19 });//стоп
                socket.Disconnect(false);
            }
нужно только обновлять isPressed в keyup.
0
214 / 210 / 146
Регистрация: 20.11.2014
Сообщений: 1,161
03.02.2015, 21:51  [ТС] 3
не совсем понял про: нужно только обновлять isPressed в keyup, и что такое isPressed
0
Master of Orion
Эксперт .NET
6100 / 4956 / 905
Регистрация: 10.07.2011
Сообщений: 14,522
Записей в блоге: 5
04.02.2015, 14:51 4
bbq, введите свою переменную и задавайте ей значение в событии keyup
0
214 / 210 / 146
Регистрация: 20.11.2014
Сообщений: 1,161
04.02.2015, 18:34  [ТС] 5
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
28
29
public Form1()
        {
            InitializeComponent();
            this.KeyDown += new KeyEventHandler(Form_KeyDown);
            this.KeyUp += new KeyEventHandler(Form_KeyUp);
        }
 
        private void Form_KeyDown(object sender, KeyEventArgs e)
        {
            Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            socket.Connect(IPAddress.Parse("192.168.0.15"), 80);
            if (e.KeyCode == Keys.W)
            {
            socket.Send(new byte[] {16, 18, 17, 18 });//старт
            socket.Disconnect(false);
            }
       }
 
        private void Form_KeyUp(object sender, KeyEventArgs e)
        {
            Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            socket.Connect(IPAddress.Parse("192.168.0.15"), 80);
 
            if (e.KeyCode == Keys.W)
            {
                socket.Send(new byte[] { 16, 19, 17, 19 });//стоп
                socket.Disconnect(false);
            }
        }
Переделал вот так. Теперь при нажатии на кнопку происходит то, что в Form_KeyDown, при отпускании, то что в Form_KeyUp. Образовалась новая проблема: при кратковременном нажатии и удержании (примерно до 3сек) старт и стоп выполняются отлично, но стоит только держать W больше 3 сек, прерывания не происходит. В чем проблема?
0
Эксперт .NET
4432 / 2092 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
04.02.2015, 19:02 6
У тебя на форме есть какие-нибудь контролы, которые становятся активными (Enabled == true) после прошествия этих 3-ёх секунд?
0
214 / 210 / 146
Регистрация: 20.11.2014
Сообщений: 1,161
04.02.2015, 19:09  [ТС] 7
нет, только одна кнопка, и та только для проверки. При ее удалении проблема осталась
0
Эксперт .NET
4432 / 2092 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
04.02.2015, 19:46 8
Вот такой вариант, правда в текущей реализации работает, даже если окно скрыто. Можешь проверять в методе обработчике нажатия и отпускания клавиши, что окно видимо. У меня просто нет времени делать идеальный супер класс, который умеет всё, что нужно и очень удобен

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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
using System;
using System.Windows.Forms;
 
namespace WinForms_KeyUp
{
    public partial class MainForm : Form
    {
        public MainForm()
        {
            InitializeComponent();
            UpdateCheckBoxIndicatorText(chBoxIndicator);
        }
 
        private void MainForm_Load(object sender, EventArgs e)
        {
            KeyboardHook.Instance.Key = Keys.W;
            KeyboardHook.Instance.KeyDown += Instance_KeyDown;
            KeyboardHook.Instance.KeyUp += Instance_KeyUp;
            KeyboardHook.Instance.SetHook();
        }
 
        private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (KeyboardHook.Instance.HookActivated)
            {
                KeyboardHook.Instance.DeleteHook();
            }
        }
 
        private void Instance_KeyDown(object sender, KeysEventArgs e)
        {
            if (e.KeyCode == Keys.W)
            {
                chBoxIndicator.Checked = true;
            }
        }
 
        private void Instance_KeyUp(object sender, KeysEventArgs e)
        {
            if (e.KeyCode == Keys.W)
            {
                chBoxIndicator.Checked = false;
            }
        }
 
        private void chBoxIndicator_CheckedChanged(object sender, System.EventArgs e)
        {
            var chBox = (CheckBox)sender;
            UpdateCheckBoxIndicatorText(chBox);
        }
 
        private static void UpdateCheckBoxIndicatorText(CheckBox chBox)
        {
            chBox.Text = chBox.Checked ? "Кнопка нажата" : "Кнопка не нажата";
        }
    }
}
Остальной код в проекте (обновил проект в 19:51):
Вложения
Тип файла: rar WinForms_KeyUp.rar (16.1 Кб, 4 просмотров)
0
214 / 210 / 146
Регистрация: 20.11.2014
Сообщений: 1,161
04.02.2015, 20:47  [ТС] 9
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
using System;
using System.Net;
using System.Net.Sockets;
using System.Windows.Forms;
 
namespace WinForms_KeyUp
{
    public partial class MainForm : Form
    {
        public MainForm()
        {
            InitializeComponent();
            UpdateCheckBoxIndicatorText(chBoxIndicator);
        }
 
        private void MainForm_Load(object sender, EventArgs e)
        {
            KeyboardHook.Instance.Key = Keys.W;
            KeyboardHook.Instance.KeyDown += Instance_KeyDown;
            KeyboardHook.Instance.KeyUp += Instance_KeyUp;
            KeyboardHook.Instance.SetHook();
        }
 
        private void MainForm_FormClosing(object sender, FormClosingEventArgs e)
        {
            if (KeyboardHook.Instance.HookActivated)
            {
                KeyboardHook.Instance.DeleteHook();
            }
        }
 
        private void Instance_KeyDown(object sender, KeysEventArgs e)
        {
            if (e.KeyCode == Keys.W)
            {
                chBoxIndicator.Checked = true;
                Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                socket.Connect(IPAddress.Parse("192.168.0.15"), 80);
                socket.Send(new byte[] { 16, 18, 17, 18 });//старт
                socket.Disconnect(false);
            }
        }
 
        private void Instance_KeyUp(object sender, KeysEventArgs e)
        {
            if (e.KeyCode == Keys.W)
            {
                chBoxIndicator.Checked = false;
                Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                socket.Connect(IPAddress.Parse("192.168.0.15"), 80);
                socket.Send(new byte[] {16, 19, 17, 19});//стоп
                socket.Disconnect(false);
            }
        }
 
        private void chBoxIndicator_CheckedChanged(object sender, System.EventArgs e)
        {
            var chBox = (CheckBox)sender;
            UpdateCheckBoxIndicatorText(chBox);
        }
 
        private static void UpdateCheckBoxIndicatorText(CheckBox chBox)
        {
            chBox.Text = chBox.Checked ? "Кнопка нажата" : "Кнопка не нажата";
        }
    }
}
Получилось так, но проблема точно такая-же. Теперь еще и чекбокс весит в положении кнопка нажата
0
Эксперт .NET
4432 / 2092 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
04.02.2015, 21:27 10
Скинь рабочий проект с имитацией проблемы. Тут многопоточность нужно использовать, похоже.

Добавлено через 2 минуты
Хотя, если это весь код, то не скидывай
0
214 / 210 / 146
Регистрация: 20.11.2014
Сообщений: 1,161
04.02.2015, 21:55  [ТС] 11
Это весь код, мне кажется что я пока кнопку нажатой держу он кучу пакетов отправляет на устройство, когда я кнопку отпускаю устройство пакеты продолжает обрабатывать
0
Эксперт .NET
4432 / 2092 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
05.02.2015, 01:17 12
Цитата Сообщение от bbq Посмотреть сообщение
мне кажется что я пока кнопку нажатой держу он кучу пакетов отправляет на устройство
В смысле кажется? Напиши код, который будет показывать, что происходит. Хотя бы что-то типа:
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
28
29
30
31
32
33
34
35
        private void Instance_KeyDown(object sender, KeysEventArgs e)
        {
            Debug.WriteLine(string.Format("Нажата клавиша {0}", Enum.GetName(typeof(Keys), e.KeyCode)));
            if (e.KeyCode == Keys.W)
            {
                chBoxIndicator.Checked = true;
                string ip = "192.168.1.1";
                
                Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                socket.Connect(IPAddress.Parse(ip), 80);
                Debug.WriteLine(string.Format("KeyDown - Подключился к {0}", ip));
                socket.Send(new byte[] { 16, 18, 17, 18 });//старт
                Debug.WriteLine("KeyDown - данные отправлены");
                socket.Disconnect(false);
                Debug.WriteLine("KeyDown - соединение закрыто");
            }
        }
 
        private void Instance_KeyUp(object sender, KeysEventArgs e)
        {
            Debug.WriteLine(string.Format("Отпущена клавиша {0}", Enum.GetName(typeof(Keys), e.KeyCode)));
            if (e.KeyCode == Keys.W)
            {
                chBoxIndicator.Checked = false;
                string ip = "192.168.1.1";
 
                Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
                socket.Connect(IPAddress.Parse(ip), 80);
                Debug.WriteLine(string.Format("KeyUp - Подключился к {0}", ip));
                socket.Send(new byte[] { 16, 19, 17, 19 });//стоп
                Debug.WriteLine("KeyUp - данные отправлены");
                socket.Disconnect(false);
                Debug.WriteLine("KeyUp - соединение закрыто");
            }
        }
Мой вывод:
Нажата клавиша W
Всё.

Понятно, что мне видимо не к чему коннектиться. ТАк что затестить нормально не смогу, нет времени сейчас разбираться с сокетами, писать сервер. Если скинешь готовый пример, который будет у меня работать при запуске, то попробую дальше помочь, иначе, увы...

Добавлено через 2 часа 14 минут
Цитата Сообщение от bbq Посмотреть сообщение
мне кажется что я пока кнопку нажатой держу он кучу пакетов отправляет на устройство
Кстати, да. Обработчик срабатывает несколько раз подряд, если кнопку не отпускать. Только заметил, когда закоментировал код сокетов.
0
214 / 210 / 146
Регистрация: 20.11.2014
Сообщений: 1,161
05.02.2015, 12:35  [ТС] 13
И как с этим быть? через while попробовать, а по отпусканию кнопки его прерывать?
0
Эксперт .NET
5545 / 4308 / 1218
Регистрация: 12.10.2013
Сообщений: 12,352
Записей в блоге: 2
05.02.2015, 13:28 14
Цитата Сообщение от bbq Посмотреть сообщение
И как с этим быть?
bbq, а уточните, как это должно работать.
Кнопка нажата-отпущена: что должно произойти?
Кнопка нажата и удерживается: что должно произойти?
А что я что-то не уловил сути задачи...
0
214 / 210 / 146
Регистрация: 20.11.2014
Сообщений: 1,161
05.02.2015, 13:37  [ТС] 15
В первом сообщении написано, напишу подробнее. Есть устройство: WI-FI модуль, плата и моторчик. К модулю можно подключится по 192.168.0.15, 80 порт. Когда на устройство отправляю команду 16, 18, 17, 18, то есть socket.Send(new byte[] { 16, 18, 17, 18 }); моторчик крутится это происходит пока клавиша W нажата, как только я отпускаю W должно посылаться socket.Send(new byte[] { 16, 19, 17, 19 }) - команда на остановку моторчика. Это все идеально работает если W нажата меньше 3х сек., если дольше, то моторчик крутится долгое время, потом только тормозит
0
Эксперт .NET
4432 / 2092 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
05.02.2015, 13:43 16
Лучший ответ Сообщение было отмечено bbq как решение

Решение

Цитата Сообщение от bbq Посмотреть сообщение
И как с этим быть?
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
28
29
30
        private bool _pressed;
        private int _counter;
 
        private void Instance_KeyDown(object sender, KeysEventArgs e)
        {
            if (!_pressed && e.KeyCode == Keys.W)
            {
                _pressed = true;
                chBoxIndicator.Checked = true;
                Text = string.Format("Кол-во срабатываний нажатия: {0}", ++_counter);
                Task.Factory.StartNew(() =>
                {
                    //Длительная операция
                });
            }
        }
 
        private void Instance_KeyUp(object sender, KeysEventArgs e)
        {
            _pressed = false;
            if (e.KeyCode == Keys.W)
            {
                chBoxIndicator.Checked = false;
 
                Task.Factory.StartNew(() =>
                {
                    //Длительная операция
                });
            }
        }
Добавлено через 2 минуты
Интересно, что будет, если первое сообщение ещё не отправлено до конца, а уже послано второе?

Я думаю, тебе нужно проинициализировать сокет 1 раз и с одного подключения слать команды, а не создавать новые каждый раз.
1
214 / 210 / 146
Регистрация: 20.11.2014
Сообщений: 1,161
05.02.2015, 22:20  [ТС] 17
Casper-SC, спасибо, помогло

Добавлено через 3 часа 25 минут
Небольшая проблемка появилась, теперь пытаюсь послать команду на вращение в обратную сторону, почему то не работает. Что не так?

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
private bool _pressed;
        private void Instance_KeyDown(object sender, KeysEventArgs e)
        {
            Socket socket = new Socket(AddressFamily.InterNetwork, SocketType.Stream, ProtocolType.Tcp);
            if (!_pressed && e.KeyCode == Keys.W)
            {
                _pressed = true;
                Task.Factory.StartNew(() =>
                {
                    socket.Connect(IPAddress.Parse("192.168.0.15"), 80);
                    socket.Send(new byte[] { 16, 18, 17, 18 });//вращаем в одну сторону
                    socket.Disconnect(false);
                });
            }
 
            if (!_pressed && e.KeyCode == Keys.S)
            {
                _pressed = true;
                Task.Factory.StartNew(() =>
                {
                    socket.Connect(IPAddress.Parse("192.168.0.15"), 80);
                    socket.Send(new byte[] { 16, 20, 70, 20});//вращаем в другую сторону
                    socket.Disconnect(false);
                });
            }
 
        }
Если добавить KeyboardHook.Instance.Key = Keys.S; работает только S, а W не работает
0
Эксперт .NET
4432 / 2092 / 404
Регистрация: 27.03.2010
Сообщений: 5,657
Записей в блоге: 1
06.02.2015, 00:29 18
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
        private void Instance_KeyDown(object sender, KeysEventArgs e)
        {
            if (!_pressed)
            {
                _pressed = true;
                Debug.WriteLine(string.Format("Нажата клавиша {0}", Enum.GetName(typeof (Keys), e.KeyCode)));
                chBoxIndicator.Checked = true;
 
                Action action = null;
                switch (e.KeyCode)
                {
                    case Keys.W:
                        action = () => { Debug.WriteLine("Вращение влево"); };
                        break;
 
                    case Keys.S:
                        action = () => { Debug.WriteLine("Вращение вправо"); };
                        break;
                }
                if (action != null)
                {
                    Task.Factory.StartNew(action);
                }
            }
        }
 
        private void Instance_KeyUp(object sender, KeysEventArgs e)
        {
            _pressed = false;
            Debug.WriteLine(string.Format("Отпущена клавиша {0}", Enum.GetName(typeof(Keys), e.KeyCode)));
 
            Action action = null;
            switch (e.KeyCode)
            {
                case Keys.W:
                    action = () => { Debug.WriteLine("Вращение влево прекращено\r\n"); };
                    break;
 
                case Keys.S:
                    action = () => { Debug.WriteLine("Вращение вправо прекращено\r\n"); };
                    break;
            }
            if (action != null)
            {
                Task.Factory.StartNew(action);
            }
        }
 
        private void MainForm_Load(object sender, EventArgs e)
        {
            KeyboardHook.Instance.KeyDown += Instance_KeyDown;
            KeyboardHook.Instance.KeyUp += Instance_KeyUp;
            KeyboardHook.Instance.SetHook();
        }
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
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
using System;
using System.Diagnostics;
using System.Runtime.InteropServices;
using System.Windows.Forms;
 
namespace WinForms_KeyUp
{
    public class KeysEventArgs : EventArgs
    {
        public KeysEventArgs(Keys key)
        {
            KeyCode = key;
        }
 
        public Keys KeyCode { get; protected set; }
    }
 
    internal class KeyboardHook
    {
        #region [ Переменные для хуков ]
 
        private delegate IntPtr LowLevelKeyboardProc(int nCode, IntPtr wParam, IntPtr lParam);
 
        private const int WH_KEYBOARD_LL = 13;
        private const int WM_KEYDOWN = 0x0100;
        private const int WM_KEYUP = 0x0101;
        private LowLevelKeyboardProc _proc;
        private IntPtr _hookID = IntPtr.Zero;
 
        [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
        private static extern IntPtr SetWindowsHookEx(int idHook, LowLevelKeyboardProc lpfn, IntPtr hMod, uint dwThreadId);
 
        [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
        public static extern bool UnhookWindowsHookEx(IntPtr hhk);
 
        [DllImport("user32.dll", CharSet = CharSet.Auto, SetLastError = true)]
        private static extern IntPtr CallNextHookEx(IntPtr hhk, int nCode, IntPtr wParam, IntPtr lParam);
 
        [DllImport("kernel32.dll", CharSet = CharSet.Auto, SetLastError = true)]
        private static extern IntPtr GetModuleHandle(string lpModuleName);
 
        #endregion
 
        private static readonly KeyboardHook _instance;
 
        private KeyboardHook()
        {
            _proc = HookCallback;
        }
 
        static KeyboardHook()
        {
            _instance = new KeyboardHook();
        }
 
        public bool HookActivated { get; protected set; }
 
        public static KeyboardHook Instance
        {
            get { return _instance; }
        }
 
        #region [ =================== методы для хуков =================== ]
 
        private IntPtr SetHook(LowLevelKeyboardProc proc)
        {
            using (Process curProcess = Process.GetCurrentProcess())
            using (ProcessModule curModule = curProcess.MainModule)
            {
                HookActivated = true;
                return SetWindowsHookEx(WH_KEYBOARD_LL, proc, GetModuleHandle(curModule.ModuleName), 0);
            }
        }
 
        private IntPtr HookCallback(int nCode, IntPtr wParam, IntPtr lParam)
        {
            if ((nCode >= 0))
            {
                if (wParam == (IntPtr)WM_KEYDOWN)
                {
                    int vkCode = Marshal.ReadInt32(lParam);
 
                    OnKeyDown((Keys)vkCode);
                    return (IntPtr)1;
 
                }
                else if (wParam == (IntPtr)WM_KEYUP)
                {
                    int vkCode = Marshal.ReadInt32(lParam);
 
                    OnKeyUp((Keys)vkCode);
                    return (IntPtr)1;
                }
            }
            return CallNextHookEx(_hookID, nCode, wParam, lParam);
        }
 
        #endregion
 
 
        public event EventHandler<KeysEventArgs> KeyDown;
 
        public event EventHandler<KeysEventArgs> KeyUp;
 
        protected virtual void OnKeyDown(Keys key)
        {
            EventHandler<KeysEventArgs> handler = KeyDown;
            if (handler != null) handler(this, new KeysEventArgs(key));
        }
 
        protected virtual void OnKeyUp(Keys key)
        {
            EventHandler<KeysEventArgs> handler = KeyUp;
            if (handler != null) handler(this, new KeysEventArgs(key));
        }
 
        /// <summary>
        /// Удалить хук
        /// </summary>
        public void DeleteHook()
        {
            HookActivated = false;
            UnhookWindowsHookEx(_hookID);
        }
 
        /// <summary>
        /// Установить хук
        /// </summary>
        public void SetHook()
        {
            _hookID = SetHook(_proc);
        }
    }
}
Вложения
Тип файла: rar WinForms_KeyUp.rar (17.8 Кб, 2 просмотров)
0
06.02.2015, 00:29
IT_Exp
Эксперт
87844 / 49110 / 22898
Регистрация: 17.06.2006
Сообщений: 92,604
06.02.2015, 00:29
Помогаю со студенческими работами здесь

Запуск и остановка потока
Всем привет! private void btnRotate_Click(object sender, EventArgs e) { Thread thread...

Запуск потока. winforms
Здравствуйте. WinForms. У меня 9 потоков (Thread). На одной кнопке 3 потока, на второй три...

Запуск и остановка потока
Правильная ли реализация управления потоком была приведена в программе? Или же есть более...

Запуск новой формы при завершении потока
Дело вот в чём, существует поток и при его завершении должна открываться новая форма. Но, Form1...


Искать еще темы с ответами

Или воспользуйтесь поиском по форуму:
18
Ответ Создать тему
Опции темы

КиберФорум - форум программистов, компьютерный форум, программирование
Powered by vBulletin
Copyright ©2000 - 2024, CyberForum.ru