На работе у нас очень загруженное приложение Windows Forms.Он работает на сервере с 24 ядрами.
Поскольку модель Windows Forms включает в себя один поток GUI, обрабатывающий насос сообщений, создается впечатление, что богатый и сложный графический интерфейс плохо использует возможности системы.Я ошибаюсь, говоря это?
Так что мои коллеги обсуждали это.Наше приложение включает в себя две более или менее независимых формы.Идея заключается в том, чтобы вспомогательная форма работала в своем собственном выделенном потоке, освобождая основной поток графического интерфейса приложения для обработки только сообщений, отправляемых в основную форму.
Предположительно, это будет выглядеть примерно так:
void CreateAuxiliaryForm()
{
Action displayForm = () =>
{
var f = new AuxiliaryForm();
f.ShowDialog();
};
displayForm.BeginInvoke(displayForm.EndInvoke, null);
}
Теперь, во-первых, я не знаю, безопасно ли это вообще делать.Но я думаю, что, поскольку эти две формы будут независимыми, для каждой из них должно быть нормально иметь собственную нить.Это правда?
Я сказал «более или менее», и это потому, что я не могу сказать, что две формы не взаимодействуют вообще.Но я и мои коллеги решили, что в любом сценарии, в котором основная форма каким-то образом должна взаимодействовать со вспомогательной формой (скажем, обрабатывая событие, вызванное другим), мы просто должны обязательно использовать Invoke
/ BeginInvoke
для отправки любого кода, связанного с GUI, в соответствующую рассылку сообщений.
Что думают люди об этой идее?