Visual C#通过绘制基于数据的图形.USB



我正试图根据从外部连接的USB设备到我的电脑的数据在表单应用程序上绘制图形。我的目标是不断从USB设备上传数据,并每隔20ms更新一次图形。

首先,我制作了以下两个代码,并将它们放入button_click函数中。每次点击按钮,它们都能正常工作。

uploadData(); // this uploads 2KB data from USB device connected to my PC
drawGraphics(); // this draws graphics on a picture box

所以在下一步中,我将它们放入while无限循环中,如下所示。但是,当从USB设备上传的数据一直在运行时,绘图就不起作用了。我正在探查USB设备硬件,我确认它一直在向我的电脑发送新数据。

while(true)
{
   uploadData(); 
   drawGraphics(); 
}

我在上面的代码之间放了Thread.Sleep(),并放了各种延迟值,看看问题是否得到了解决,但没有成功。

有趣的是,每次我将鼠标光标移到窗体上时,绘图都会开始一段时间,但会在早期停止。

这可能与一个非常简单的错误有关。我对Visual C#有点陌生,所以碰到这堵墙就无法克服它。

通常,在GUI应用程序中处理偶尔更新需求的方法是使用计时器。计时器在后台线程上运行,偶尔会通知主线程发生"滴答"声。这样,其他操作,如处理鼠标和键盘输入、绘制到屏幕等,都可以继续。我不完全确定为什么您的解决方案不起作用,但我99%确信您可以通过将while循环替换为按所需间隔计时的System.Windows.Forms.Timer来修复它。

因此,我建议:通过Visual Studio设计器将Windows窗体计时器添加到窗体中,将其Interval属性设置为所需的毫秒数,为计时器刻度注册事件处理程序,将uploadData()调用移动到该事件处理程序中,并将drawGraphics()方法的内容移动到PictureBoxPaint事件中。

创建一个计时器控件而不是无限循环。将"间隔"设置为20(即20毫秒)。在OnTick中创建一个方法:

1) 将计时器的Enabled属性发送到"False"2) 调用upLoadData和drawGraphics方法3) 将计时器的Enabled属性设置为True

这样,如果由于某种原因,第一次出现的时间比预期的要长一点,您就不会同时尝试一次访问USB上的数据不止一次。

相关内容

  • 没有找到相关文章

最新更新