Kei*_*thS 3 c# multithreading winforms
很长一段时间,我需要放置一个WinForms面板和一个非托管类的实例,它在一个单独的线程中使用它来保持主窗口的响应(SDK有时需要几秒钟才能得到它的意思绘制,当它这样做时,它会阻止UI线程).我实际上需要很多这些(最多32个),但我们现在只讨论一个; 该概念应该能够在必要时多次复制.
我认为我需要做的是启动一个新的线程,它将"新建"一个Panel,然后启动一个与特定内容无关的ApplicationContext,并将其分配给Panel.然后,Panel类应该有一个Dispose()重载,它将结束ApplicationContext,关闭消息泵并终止线程.
我需要知道的是:
你不应该这样解决问题.您应该让绘图线程绘制到内存中的图像,并让UI线程将这些图像渲染到面板.如果绘图线程为每次迭代生成一个新图像,那么UI线程可以缓存图像并在每次新图像可用时替换它.稍后你会为自己省去很多麻烦,而不是试图篡夺预期的线程行为.