Dispatcher.Invoke与WPF

时间:2017-10-04 11:19:58

标签: c# wpf http asynchronous dispatcher

我正在使用C#,Net 4.5.2和WPF开发应用程序。它具有远程控制的GUI,因此传入的HTTP GET请求(由Nancy处理)会触发Window中的一些更改。由于服务器没有在GUI线程中运行,我使用Dispatcher.Invoke来调用图形更改方法。在那里我得到了非常奇怪的行为:如果Show未被Window调用,则没有任何反应。但是调用Show会创建2个窗口而不是1个窗口。我该如何解决?

public partial class App : Application //App.xaml.cs
{
    public static MainWindow mainWindow;

    protected override void OnStartup(StartupEventArgs e)
    {
        base.OnStartup(e);
        mainWindow = new MainWindow();
        //REMOVING NEXT LINE COMPLETELY BREAKS DISPATCHER.INVOKE IN mainWindow
        mainWindow.Show();
    }
}


public class MainModule : Nancy.NancyModule //Nancy server module
{
    public MainModule()
    {
        Get["/stop"] = param => App.mainWindow.StopContent();
    }
}


public partial class MainWindow : Window //WPF window
{

    public MainWindow()
    {
        InitializeComponent();
    }

    public void StopContent()
    {
        //LINE BELOW WON'T WORK IF Show WASN'T CALLED
        Dispatcher.Invoke(new Action(() => { Background = null; }));
    }
}

0 个答案:

没有答案