C#interactive(csi.exe)中的WPF

C#interactive(csi.exe)中的WPF,c#,wpf,c#-interactive,csi,C#,Wpf,C# Interactive,Csi,我开始玩c#interactive。在Visual Studio中,我能够使用以下代码创建一些窗口: #r "PresentationFramework" using System.Windows; var w = new Window(); w.Show(); 但是,由于使用csi.exe,我必须执行类似的操作才能看到一个窗口(我已经从net.compiler nuget包、tools目录运行了executable): 该窗口在线程运行时显示,但我不确定如何在VS C交互式视图中实现类似的行

我开始玩c#interactive。在Visual Studio中,我能够使用以下代码创建一些窗口:

#r "PresentationFramework"
using System.Windows;
var w = new Window();
w.Show();
但是,由于使用csi.exe,我必须执行类似的操作才能看到一个窗口(我已经从net.compiler nuget包、tools目录运行了executable):

该窗口在线程运行时显示,但我不确定如何在VS C交互式视图中实现类似的行为。

[编辑]

嗨,Paweł

以下是一个答案(这次在csi中测试),基于:


谢谢你的回答,但在VS中一切都如我所料。我希望在控制台中使用csi.exe时获得相同的行为。在csi中,第一段代码不起作用,但同样的代码在VSI中起作用,这个问题的更好标题应该是“csi.exe中的WPF”谢谢你的回答,但问题可能还是一样的-我不能直接调用在另一个线程中创建的窗口,即使我在创建的线程之外声明了窗口变量。如果我想修改它,我必须这样写:
win.Dispatcher.Invoke(()=>{win.WindowState=WindowState.Maximized;})
我认为csi代表C Sharp Interactive,VS只能看到它。不是吗?显然csi和C#Interactive在主线程类型上有所不同。在csi中,它是MTA,而C#Interactive是STA。不过,应该可以执行上述脚本并将上下文切换到新的STA线程。
#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();
#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();