WPF в C# интерактивный (csi.exe)
Я начал играть с C# Interactive. В Visual Studio мне удалось создать какое-то окно со следующим кодом:
#r "PresentationFramework"
using System.Windows;
var w = new Window();
w.Show();
Однако из-за этой ошибки при использовании csi.exe мне пришлось сделать что-то подобное, чтобы увидеть окно (я запускаю исполняемый файл из пакета nuget net.compiler, каталога tools):
#r "PresentationFramework"
using System.Windows;
using System.Threading;
var t = new Thread(()=>{var w = new Window(); w.Show(); Thread.Sleep(2000);});
t.SetApartmentState(ApartmentState.STA);
t.Start();
Окно отображается во время работы потока, но я не уверен, как мне добиться такого же поведения в интерактивном представлении VS C#.
1 ответ
[Изменено]
Привет Павел,
Вот ответ (проверенный в CSI на этот раз), основанный на: Запуск окна WPF в отдельном потоке
#r "PresentationFramework"
#r "Microsoft.VisualStudio.Threading"
using System.Windows.Controls;
using System.Windows;
using System.Threading;
var newWindowThread = new Thread(new ThreadStart(() =>
{
var tempWindow = new Window();
var t = new TextBox() {Text = "test"};
tempWindow.Content = t;
tempWindow.Show();
System.Windows.Threading.Dispatcher.Run();
}));
newWindowThread.SetApartmentState(ApartmentState.STA);
newWindowThread.IsBackground = true;
newWindowThread.Start();