我的应用程序从电子设备绘制值。它在一秒内绘制10个值。它在获取下一个值之前等待100ms。等待由Thread.Sleep(100);
给出。这部分工作正常。
我在MouseMove事件中显示鼠标位置。但为了表明这个位置,我之前需要延迟。
所以我想避免那种延迟。我试图在像new Thread(chartControl1_MouseMove).Start();
这样的线程中运行MouseMove事件。但它会出现以下错误:
- 最佳重载方法匹配 'System.Threading.Thread.Thread(System.Threading.ThreadStart)'有一些无效的参数。
- 参数'1':无法从'方法组'转换为'System.Threading.ThreadStart'
醇>
任何建议...... ???
答案 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处理程序的主体移动到其他方法并在线程上运行该方法。