如何在线程中运行mouse_move事件...?

时间:2011-08-10 06:35:52

标签: c# .net visual-studio-2005

我的应用程序从电子设备绘制值。它在一秒内绘制10个值。它在获取下一个值之前等待100ms。等待由Thread.Sleep(100);给出。这部分工作正常。

我在MouseMove事件中显示鼠标位置。但为了表明这个位置,我之前需要延迟。

所以我想避免那种延迟。我试图在像new Thread(chartControl1_MouseMove).Start();这样的线程中运行MouseMove事件。但它会出现以下错误:

  
      
  1. 最佳重载方法匹配   'System.Threading.Thread.Thread(System.Threading.ThreadStart)'有一些无效的参数。
  2.   
  3. 参数'1':无法从'方法组'转换为'System.Threading.ThreadStart'
  4.   

任何建议...... ???

4 个答案:

答案 0 :(得分:0)

MouseMove事件需要一些参数。但是线程开始并没有通过它们。假设该方法具有无效参数。

答案 1 :(得分:0)

这是因为我采用的方法chartControl1_MouseMove被声明为

public void chartControl1_MouseMove(object sender,MouseEventArgs e)

无法转换为ThreadStart委托,其格式为

public delegate void ThreadStart()

要完成这项工作,您需要使用void返回类型创建自己的方法,而不需要像

这样的参数
private void foo()

并将您的代码行更改为:

new Thread(foo).Start();

这样至少应该编译。然后,您必须在foo方法中实现所需的行为。

答案 2 :(得分:0)

您正在使用需要参数的方法。要么将方法更改为没有参数,要么使用工作项:

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

您需要将方法chartControl1_MouseMove(object sender, MouseEventArgs e)转换为包含一个参数的内容,或者您​​可以恢复使用任务。通常,将工作代码放在自己的方法中并让事件成为事件(如果在表单中已经异步调用)通常会更好。然后从事件中调用工作方法(将其排队)。

使用线程池优先于see this post

答案 3 :(得分:0)

使用parameterizedThreadStart或更好地将mouse_move处理程序的主体移动到其他方法并在线程上运行该方法。