我知道这可能是一个重复的帖子,但我想确保我清楚地问这个问题并根据我的措辞得到答案。
我有一个从常见的可视元素继承的表单集合: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()之后的代码,或者是由不同的线程处理的处理程序?
非常感谢
答案 0 :(得分:5)
Winforms在一个线程中运行 - 实际上你甚至无法从第二个线程访问它而不会遇到麻烦。除非你自己创建一个线程(或者一个BackgroundWorker或构成一个线程的任何其他东西),否则你只会有一个线程。
答案 1 :(得分:2)
简单来说,.NET Winforms在单个线程下工作。
答案 2 :(得分:2)
等待事件完成。事件实际上只是对其他地方(也就是委托)定义的方法的方法调用。完成所有这些操作后,ShowDialog()
之后的下一段代码将会运行。