Multithreading c#如何在带有usercontrols的主窗体中运行带有事件的工作线程

Multithreading c#如何在带有usercontrols的主窗体中运行带有事件的工作线程,multithreading,user-controls,Multithreading,User Controls,我将应用程序项目拖放到主窗体上,该窗体包含一个tablelayoutpanel,其中显示有关拖动项目的自定义用户控件 UserControls订阅数据并具有在后台运行的事件,这些事件与面板中的周围控件相互依赖 我需要创建两个线程,一个是显示表单的主线程,另一个是处理控件事件中所有数据的工作线程 这些事件是控件本身的一部分,需要为每个控件单独订阅 我遇到的问题是,如何创建控件并将它们放在一个线程中的表单中,而在另一个线程中处理事件 我现在尝试的是首先创建插入了所需控件的GUI。然后我启动工作线程,

我将应用程序项目拖放到主窗体上,该窗体包含一个tablelayoutpanel,其中显示有关拖动项目的自定义用户控件

UserControls订阅数据并具有在后台运行的事件,这些事件与面板中的周围控件相互依赖

我需要创建两个线程,一个是显示表单的主线程,另一个是处理控件事件中所有数据的工作线程

这些事件是控件本身的一部分,需要为每个控件单独订阅

我遇到的问题是,如何创建控件并将它们放在一个线程中的表单中,而在另一个线程中处理事件

我现在尝试的是首先创建插入了所需控件的GUI。然后我启动工作线程,它创建了一个表控件的引用数组,然后让这个线程分别订阅来自控件的事件。这在任何时候都不应该与主窗体交互。主窗体将有一个计时器,并定期向屏幕更新数据

我发现并使用的示例包括启动另一个表单或应用程序的线程,或在完成后退出的简单工作线程,我需要一个稳定的后台线程,该线程可以脱离现有的gui内容,但不受显示的限制


谢谢。

我想我成功地使它运行了多种颜色。但是我不确定如何测试我是否有一个工作线程在运行。我在我的thread方法的末尾删除了while(true)DoEvents循环,但是线程似乎在继续。这是正常的还是我应该暂时离开以确定。此外,我在主窗体和控件上都有控件按钮,即使我没有使用Invoke,它们也可以正常工作。到目前为止,我没有得到例外,但是按钮是否可能在错误的线程中执行?谢谢。经过更多的测试,我发现如果没有这个,线程就会死亡。但是应用程序仍然像在显示线程中处理事件一样正常运行。但,虽然CPU是100,但响应速度很快。有没有一种很好的方法来查看某个线程正在哪个线程中运行,因为我想知道哪个线程处理工作线程订阅的事件?