Итак, я пишу приложение WPF с Iron Python. Все отлично работает, если я запускаю скрипт вне Iron Python REPL с помощью команды "ipy.exe wpf.py". Однако, если сценарий был запущен внутри Iron Python REPL с помощью команды "execfile ('wpf.py')", при первом запуске OK, во втором при ошибке "SystemError: Невозможно создать более одной системы. Windows .Application экземпляр в том же AppDomain. "
Насколько я понимаю, это потому, что он будет создавать новый AppDomain каждый раз, когда вы запускаете его вне REPL, в то время как он будет использовать один и тот же домен при работе внутри REPL, и вы можете инициализировать Application
дважды. Проблема в том, что мне приходится запускать его внутри одного и того же домена приложений много раз, поскольку это не отдельное приложение Iron Python. Я пробовал много вещей, таких как изменение режима выключения, добавив app.ShutdownMode = ShutdownMode.OnExplicitShutdown
после app=Application()
, но это просто повесило весь REPL.
Может кто-нибудь помочь пролить свет? Большое спасибо!
import clr
clr.AddReference("PresentationFramework")
clr.AddReference("PresentationCore")
clr.AddReference("System.Xml")
from System.Xml import XmlReader
from System.IO import StringReader
from System.Windows.Markup import XamlReader
from System.Windows import Application
s = XmlReader.Create(StringReader('''
<Window
xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
Title="IronPython MVVM Demo2"
Width="450"
SizeToContent="Height">
<Grid Margin="15" x:Name="grid1">
<StackPanel Margin="5">
<Button Margin="5">One</Button>
<Button Margin="5">Two</Button>
<Button Margin="5">Three</Button>
</StackPanel>
</Grid>
</Window>
'''))
win = XamlReader.Load(s)
app = Application()
app.Run(win)
print("The End.")