【发布时间】:2014-05-30 01:17:54
【问题描述】:
我想知道是否可以 1) 在应用程序主线程创建的窗体中托管一个后台线程创建的窗体? 或 2) 将处理鼠标移动的线程与绘制窗体应用程序的线程分开?
我知道这些问题听起来很疯狂,但我发现自己遇到了一个特殊的问题,我欢迎能够回避这个问题的建议,尽管我认为我们不能轻易脱离 Windows 窗体并使用不同的 ui 技术.
我们的软件团队为第 3 方 Windows 窗体应用程序编写了一些插件。因此,我们提供了一个根主窗体,它使用他们的 api 向他们托管一堆用户控件,并且他们以自己的 windows 窗体托管它们。目前,所有用户界面都是在应用程序的主线程上创建的,因此它们可以很好地相互配合。我们提供的许多用户控件都有 system.windows.forms.datavisualisation 图表,这些图表由应用程序获取的数据实时绘制。我们遇到的问题之一是当用户不规律地移动鼠标时,显示停止更新,因为所有图形的绘制 (GDI+) 都是在主线程上完成的(我们使用后台线程和 TPL 来获取和计算数据,但是绘制在主线程上完成)。所以我想知道是否有可能让这些图表的所有 gdi+ 绘制发生在与应用程序主线程不同的线程上,所以绘制将继续,我们仍然可以接收鼠标移动输入和用户交互的点击,但是鼠标不稳定移动不能淹没消息队列并停止用户控件的 gdi+ 绘制。
任何特别的帮助,特别是指向相关 api 或演示技术的文章的指针将不胜感激。 谢谢。
【问题讨论】:
-
匿名投票很糟糕,而且很懦弱。 :-)
-
同意,+1 以补偿 :)
标签: multithreading winforms winapi mouse mschart