WinForms中的事件是异步触发的吗?

时间:2010-06-04 12:13:22

标签: c# winforms events concurrency multithreading

我知道这可能是一个重复的帖子,但我想确保我清楚地问这个问题并根据我的措辞得到答案。

我有一个从常见的可视元素继承的表单集合:MainVisualForm。这个元素为我提供了一种了解表单何时向后退步的方法。序列中接下来的形式取决于用户操作。

我目前有一个像我正在测试的此类事件的代码:

form.OnNextForm += (f, ev) =>
            {
                Parameters.Vehicle = ((VehicleForm)f).SelectedVehicle;
                //FormStack.Push(Parameters.Vehicle == Vehicle.SUV
                //                ? new KeyValuePair<Type, IFormActionBehvaior>(typeof(EntertainmentForm), null)
                //                : new KeyValuePair<Type, IFormActionBehvaior>(typeof(ColorForm), null));
            };

此分配紧接着是ShowDialog(),它会阻止用户直到Dialog表单关闭。

问题是: 表单关闭后,.NET是否等待EventHandler完成,然后运行直接跟在ShowDialog()之后的代码,或者是由不同的线程处理的处理程序?

非常感谢

3 个答案:

答案 0 :(得分:5)

Winforms在一个线程中运行 - 实际上你甚至无法从第二个线程访问它而不会遇到麻烦。除非你自己创建一个线程(或者一个BackgroundWorker或构成一个线程的任何其他东西),否则你只会有一个线程。

答案 1 :(得分:2)

简单来说,.NET Winforms在单个线程下工作。

答案 2 :(得分:2)

等待事件完成。事件实际上只是对其他地方(也就是委托)定义的方法的方法调用。完成所有这些操作后,ShowDialog()之后的下一段代码将会运行。