Python.Net:使用Python.N在第二个appdomain中加载第二个窗口

2024-04-16 18:47:12 发布

您现在位置:Python中文网/ 问答频道 /正文

我想知道如何启动一个新的AppDomain并在该AppDomain中运行一个WPF窗口?你知道吗

我的代码是这样的:

import clr 
clr.AddReference(r"wpf\PresentationFramework")
from System.Windows import Application, Window
from System.Threading import Thread, ThreadStart, ApartmentState
from System import AppDomain, AppDomainSetup, CrossAppDomainDelegate


class MyWindow(Window):
    ...

if __name__ == '__main__':
    def start_thread():
        thread1 = Thread(ThreadStart(MyWindow))
        print ("Thread 1 domain:",thread1.GetDomain().FriendlyName)
        thread1.SetApartmentState(ApartmentState.STA)
        thread1.Start()
        thread1.Join()


    ads = AppDomainSetup()
    ads.ApplicationBase = AppDomain.CurrentDomain.BaseDirectory
    ads.ConfigurationFile = \
        AppDomain.CurrentDomain.SetupInformation.ConfigurationFile

    ad2 = AppDomain.CreateDomain("ad2", None, ads)

    cadd = CrossAppDomainDelegate(start_thread)
    ad2.DoCallBack(cadd)

结果,我得到了一个错误:

系统运行时序列化.SerializationException:在程序集“\uu CodeGenerator\u assembly,Version=0.0.0,Culture=neutral,PublicKeyToken=null”中键入“\uu System\u CrossAppDomainDelegateDispatcher”未标记为可序列化。

我想挑战是将cadd对象设置为可序列化的。但是当我查找解决方案时,我没有找到任何关于如何在Python中实现它的方法。你知道吗

我对这个领域很陌生,可能一开始就错了。你知道吗

提前感谢您的帮助!你知道吗


Tags: fromimport序列化windowsystemthreadadscadd