Мне нужна была небольшая функция, которая будет ждать выхода левой кнопки мыши и не будет основана на MouseUp event
.Лучший способ реализовать функцию WaitForMouseUp()?
Во многих случаях, когда нам это нужно, мы просто пишем обработчик событий для MouseUp event
.
Это просто, и он работает.
Есть, однако случаи, когда с помощью MouseUp event
не будет полезным,
, например, когда мы уже в другой (разные) обработчик события
и левая кнопка мыши может быть нажата, когда этот обработчик события вызывается, и нам нужно дождаться его выхода. (цель должна иметь единый поток кода, а не разделить его между несколькими местами, которые могли бы быть уже занятым другим кодом)
Я реализовал это следующим образом:
public void WaitForMouseUp()
{
while((Control.MouseButtons&MouseButtons.Left)!=0)
Application.DoEvents();
}
Он работает ,
вы можете использовать его, например, когда вы находитесь в обработчике событий для события Control.Enter
,
, и если элемент управления был введен с помощью мыши, эта функция будет блокироваться до тех пор, пока не будет отпущена кнопка мыши.
Я только беспокоиться о одно:
Я использую Application.DoEvents()
там, и мне интересно, если есть другой способ вместо использования Application.DoEvents()
. (Application.DoEvents(); имеет недостатки возможного реентерабельности, и так, поэтому по этой причине я стараюсь свести к минимуму его использования, когда это возможно)
Каждый имеет представление о том, с чем я могу заменить Application.DoEvents()
часть?
Вы не можете использовать [событие mouseup] (https://msdn.microsoft.com/en-us/library/system.windows.forms.control.mouseup (v = vs.110) .aspx)? – bansi
Часто да, но есть моменты, когда вам нужно иметь блок кода, который делает что-то, и не иметь его на нескольких разных обработчиках событий (которые некоторые могут уже выполнять другую работу) – spaceman
* Мне нужна была небольшая функция, которая будет ждать левую кнопку мыши, чтобы выпустить. * Нет. Вы действительно этого не делаете. Вам нужно понимать события. –