可以在.net中创建多进程UI吗?

可以在.net中创建多进程UI吗?,.net,.net,是否可以在.net中创建类似于chrome的windows应用程序 我的意思是,每个屏幕/选项卡都是一个进程。您可以使用线程创建每个表单,该表单将由该线程持有。但请注意,您无法访问其他窗体控件 但是,如果您想拥有一个完整的类似Chrome的应用程序,您必须使用Visual C++开发您的应用程序。您可以使用线程创建每个表单,该表单将由该线程持有。但请注意,您无法访问其他窗体控件 但是如果你想拥有一个完整的类似Chrome的应用程序,你必须使用Visual C++开发你的应用程序。我不知道Chro

是否可以在.net中创建类似于chrome的windows应用程序


我的意思是,每个屏幕/选项卡都是一个进程。

您可以使用
线程创建每个表单,该表单将由该线程持有。但请注意,您无法访问其他窗体控件


但是,如果您想拥有一个完整的类似Chrome的应用程序,您必须使用Visual C++

开发您的应用程序。您可以使用
线程创建每个表单,该表单将由该线程持有。但请注意,您无法访问其他窗体控件


但是如果你想拥有一个完整的类似Chrome的应用程序,你必须使用Visual C++开发你的应用程序。

我不知道Chrome使用的具体机制。但是,我知道您可以将HWND重新设置为另一个进程的父级。事实上,我敢打赌chrome使用的任何技术都可以通过一点P/Invoke在.Net中复制

我不知道chrome使用的具体机制。但是,我知道您可以将HWND重新设置为另一个进程的父级。事实上,我敢打赌chrome使用的任何技术都可以通过一点P/Invoke在.Net中复制

铬的剂量基本上没有魔力

您需要一个提供基本UI的主机进程。然后,该主机进程为您要拥有的每个独立上下文(如chrome中的页面)启动一个子进程。现在您需要一种让子进程与主机通信的方法。这可以通过windows上的命名管道完成。主机创建一个管道,并可以通过进程参数将该管道名称处理给子管道。(如果打开Process Explorer并查看chrome的子进程,您将看到如下参数--channel=6831.059FF640.845232221)

现在,为每个无边框(只有普通内容)的子进程添加一个窗口。主机现在需要将所有windows更改发送到该子级。因此,如果宿主移动,子对象也需要实时更正其位置。如果主机最小化,子窗口也需要最小化,等等。如果切换上下文,一个子窗口不可见,一个子窗口出现

如果那个孩子死了,你只需要创建一个新的,恢复它的状态,你就完成了


chrome场景的另一种选择是将内容中的所有鼠标和键盘交互发送到该子进程,然后在该子进程中执行所有处理和计算,并将格式副本信息发送回(通过命名管道)然后给渲染添加剂量的主机。

基本上,chrome的剂量没有魔力

您需要一个提供基本UI的主机进程。然后,该主机进程为您要拥有的每个独立上下文(如chrome中的页面)启动一个子进程。现在您需要一种让子进程与主机通信的方法。这可以通过windows上的命名管道完成。主机创建一个管道,并可以通过进程参数将该管道名称处理给子管道。(如果打开Process Explorer并查看chrome的子进程,您将看到如下参数--channel=6831.059FF640.845232221)

现在,为每个无边框(只有普通内容)的子进程添加一个窗口。主机现在需要将所有windows更改发送到该子级。因此,如果宿主移动,子对象也需要实时更正其位置。如果主机最小化,子窗口也需要最小化,等等。如果切换上下文,一个子窗口不可见,一个子窗口出现

如果那个孩子死了,你只需要创建一个新的,恢复它的状态,你就完成了


chrome场景的另一种选择是将内容中的所有鼠标和键盘交互发送到该子进程,然后在该子进程中执行所有处理和计算,并将格式副本信息发送回(通过命名管道)到随后进行渲染的主机。

例如,如果您指的是多个选项卡,每个选项卡都有自己的浏览器,那么这是可能的。@mr不,我指的是每个表单/控件(winform或wpf)都有自己的进程。例如,如果您指的是多个选项卡,每个选项卡都有自己的浏览器,那么是的,这是可能的。@mr不,我是说每个表单/控件(winform或wpf)都托管在自己的进程中