【发布时间】:2023-03-14 01:01:01
【问题描述】:
我开发了在线程中完成事件处理的多线程应用程序。当 UI 线程中的事件引发时,会创建一个执行业务逻辑并终止的线程。但是,如果工作线程中的业务逻辑代码导致另一个事件; thread 调用主 UI 线程上的控制并继续其执行。同时,UI 线程为新的事件处理创建新线程。这两个线程都以并行方式执行。
我想要的是如果线程导致一个新事件;等待新的事件完成并继续他们的任务。事件应该按顺序处理。
我的任务实际上是大型框架的一部分。简而言之,应用程序通过使用反射 api 将控制事件绑定到目标代码。
当事件被捕获时,下面的 UI Thread 处理代码。
Thread workerThread = new Thread(() => executeCommandTargetAsync( ..some parameters.. ));
workerThread.Start();
工作线程通过使用 Control 的 InvokeRequired 标志和 Invoke 方法与 UI 线程进行通信。 在其他线程而不是 UI 线程中处理事件的目的是防止由于长时间的事件操作(例如从数据库更改组合框的数据源)而冻结 UI。
【问题讨论】:
-
您能否给出一些简单的示例代码来演示您的问题?您的后台线程究竟是如何创建这些事件的?通过更改/与 UI 控件交互?
-
如果你开始想等待动作完成并按顺序做事,你最好切换到调用方法(如果你不想要具体的依赖,在接口上)。跨度>
标签: c# multithreading winforms c#-4.0 event-handling