Приложение Windows Forms как Google Chrome с несколькими процессами

В Java все находится в форме класса.

Если вы хотите использовать любой объект, тогда у вас есть две фазы:

  1. Объявить
  2. Инициализация

Пример:

  • Объявление: Object a;
  • Инициализация: a=new Object();

То же самое для концепции массива

  • Объявление: Item i[]=new Item[5];
  • Инициализация: i[0]=new Item();

Если вы не дают секцию инициализации, тогда возникает NullpointerException.

25
задан Peter Mortensen 21 March 2011 в 17:09
поделиться

7 ответов

Можно использовать вызов SetParent Win32, чтобы сделать это, но это действительно чревато проблемами. Я испытал достаточно затруднений, заставив все это работать приятно с помощью окон от различного AppDomains - будет еще больше трудностей с целыми дополнительными процессами.

В основном существует потенциально большая коммуникация, требуемая между двумя процессами - вещи как изменение размеров могут стать довольно болезненными, а также что происходит, если дочернее приложение хочет выйти и т.д. Это все выполнимо, но я думал бы очень тщательно прежде, чем сделать его. Для браузера это имеет много смысла (правовая оговорка: Я работаю на Google), но на большинство других приложений это действительно не стоит усилия.

("Вкладки", Вы хотите создать фактические приложения.NET? Если так, поскольку я говорю, что это становится значительно легче - и я могу дать Вам большую подсказку, которая является, что каждый UI должен выполнить свой собственный поток UI из его собственного AppDomain. Вы получаете действительно странные эффекты, если Вы не делаете этого!)

25
ответ дан Jon Skeet 28 November 2019 в 18:23
поделиться

Проверьте это сообщение на Блоге Хрома. Только один процесс ответственен за фактический рендеринг на экран.

10
ответ дан Alexander Kojevnikov 28 November 2019 в 18:23
поделиться

Мой продукт, WindowTabs.com , отчасти делает это. Необходимо использовать Win32 - я предлагаю, чтобы Вы избегали использования SetParent, потому что Вы заканчиваете тем, что присоединили вход потока. Вместо этого потяните вкладки выше окон и используйте SetWindowPos для перемещения окон как группы. Кроме того, некоторые сторонние средства управления как Infragistic не функционируют правильно при порождении формы на уровне Win32.

5
ответ дан Maurice Flanagan 28 November 2019 в 18:23
поделиться

Система. API AddIn, представленные в.NET 3.5, позволяют Вам использовать средства управления UI в отдельном AppDomains. С некоторым переходом обруча можно заставить его работать в отдельных процессах, также.

Это поддерживается navtively в WPF. Посмотрите образец MSDN Дополнительные Возвраты UI.

Используя Windows Forms, не похоже, что это - исходно возможное использование Системы. API AddIn. См. это сообщение от Системы. Архитектор AddIn Jack Gudenkauf.

Однако существует обходное решение для WinForms. Можно сделать эту работу с небольшим взломом: См. блог команды BCL Поддержка Windows Forms в Системе. Хосты AddIn и Дополнения

5
ответ дан Judah Gabriel Himango 28 November 2019 в 18:23
поделиться

Да. Можно породить новые процессы с помощью Система. Диагностика. Процесс . Используя некоторую форму межпроцессное взаимодействие (IPC), Дистанционная работа.NET , например, можно связаться между процессами. И затем можно установить родителя окна/формы нового процесса к окну (вкладка) первого процесса, таким образом, это появляется там.

2
ответ дан Peter Mortensen 28 November 2019 в 18:23
поделиться

Не изучая слишком глубоко стопку расширяемости, можно использовать Система. Дополнение пространство имен для создавания приложения, которое по сути может создать дополнения как визуальные отдельные вкладки и установить каждую вкладку/дополнение как, процесс и это является поведением из поля.

Это будет иметь ту же функциональность как хромовые вкладки.

1
ответ дан Erick Sgarbi 28 November 2019 в 18:23
поделиться

Для тех, кто вас интересует фактическая реализация многопроцессных приложений, я написал об этом в моем сайте: Multi-Process C # APP, как Google Chrome .

Я включил работу C # код. Это было проверено на работу с .NET 2.0, .NET 3.0 и .NET 3.5.

названные трубы: как процессы говорят друг с другом

, поскольку ваш вопрос специально спросил о Google Chrome, вы должны знать, что Chrome использует названные трубы для связи между процессами.

В исходном коде C #, который я упомянул выше, есть 2 файла: pibeserver.cs & pipeClient.cs. Эти 2 файла являются тонкие обертки именованных труб Windows API. Это хорошо проверено, потому что сотни тысяч людей используют наши продукты. Таким образом, стабильность и надежность были требованием.

Как мы используем многопроцессную конструкцию

Теперь, когда у вас есть все части головоломки, позвольте мне сказать вам, как мы используем многопроцессную конструкцию в нашем приложении.

Наш продукт является полным решением обновлений. То есть, есть программа , которая строит патчи обновления (не относящихся к обсуждению), программа автономной программы обновления ( Wyupdate - также открытый источник ), а также управление автоматическим обновлением , что наши пользователи надевают свои формы C # или VB.NET.

Мы используем названные трубы для связи между автономным обновлением (Wyupdate) и автоматическим управлением обновленным управлением, сидящим в форме вашей программы. Wyupdate отчеты прогрессируют в автоматическом обновлении, а автоматический режим Updater может сказать Wyupdate для отмены прогресса, чтобы начать загрузку, начать извлечение и т. Д.

На самом деле, точные названные трубы, которые мы используем, включены в статью, которую я упомянул выше: Multi-Process C # приложение, как Google Chrome .

Почему вы не должны использовать многоправительную конструкцию

, как упомянутое выше Jon Skeet, вы должны иметь определенную потребность в многопроцессной модели. В нашем случае мы хотели сохранить Updater полностью отдельно от вашей программы. Таким образом, если Updater каким-то образом разбился, ваша программа останется невредимым. Мы также не хотели дублировать наш код в 2 места.

Это, как говорят, даже с нашими хорошо проверенными названными трубами обертки, межслосс-связь трудно. Так что течь осторожно.

14
ответ дан 28 November 2019 в 18:23
поделиться
Другие вопросы по тегам:

Похожие вопросы: