Как я могу запустить событие mouse_move в потоке ...? - PullRequest
0 голосов
/ 10 августа 2011

Мое значение графика приложения от электронного устройства.Он отображает 10 значений за одну секунду.Он ждет 100 мс, прежде чем получить следующее значение.Ожидание задается Thread.Sleep(100); Эта большая часть работает нормально.

Я показываю положение мыши в событии MouseMove.Но чтобы показать позицию, нужна задержка, которую я дал раньше.

Так что я хочу избежать этой задержки.Я пытался запустить событие MouseMove в потоке, как new Thread(chartControl1_MouseMove).Start();.Но он выдает следующие ошибки:

  1. Наилучший перегруженный метод, соответствующий «System.Threading.Thread.Thread (System.Threading.ThreadStart)», имеет недопустимые аргументы.
  2. Аргумент '1': невозможно преобразовать из 'группы методов' в 'System.Threading.ThreadStart'

Любые предложения ... ???

Ответы [ 4 ]

0 голосов
/ 10 августа 2011

Используйте параметрizedizedThreadStart или лучше переместите тело обработчика mouse_move в другой метод и запустите этот метод в потоке.

0 голосов
/ 10 августа 2011

Это потому, что ваш метод chartControl1_MouseMove, который я использую, объявлен как

public void chartControl1_MouseMove(object sender,MouseEventArgs e)

и не может быть преобразован в ThreadStart делегат, который принимает форму

public delegate void ThreadStart()

чтобы сделать это, вам нужно создать собственный метод с возвращаемым типом void и без параметров, таких как

private void foo()

и изменить строку кода на:

new Thread(foo).Start();

так оно должно хотя бы компилироваться.Затем вам нужно реализовать желаемое поведение внутри метода foo.

0 голосов
/ 10 августа 2011

Вы используете метод, который требует параметров. Либо измените метод, чтобы он не имел параметров, либо используйте рабочий элемент:

ThreadPool.QueueUserWorkItem(o => Method(m));

Вам необходимо преобразовать ваш метод chartControl1_MouseMove(object sender, MouseEventArgs e) во что-то, содержащее один аргумент, или вы можете вместо этого вернуться к использованию Задач. В целом, часто лучше поместить ваш рабочий код в его собственный метод и позволить событию быть событием (которое уже вызывается асинхронно, если в форме). Затем вы вызываете рабочий метод (ставите его в очередь) из события.

Преимущества использования пула потоков перед потоками см. В этом сообщении .

0 голосов
/ 10 августа 2011

Событие MouseMove принимает несколько аргументов. Но начало потока не проходит их. Предполагается, что метод имеет пустые параметры.

...