Application.Current和App.Current为null

时间:2016-09-22 16:25:55

标签: c# wpf

我正在创建一个应用程序(Outlook的Office加载项)

我遇到的问题是更新我的屏幕。我知道我需要使用调用Dispatcher但是,在test.S: test.c $(XCC) -S -o $@ $(XCFLAGS) -c $< foo.S: foo.c $(XCC) -S -o $@ $(XCFLAGS) -c $< %.o: %.S $(XCC) -o $@ $(XCFLAGS) -c $<

中它始终为null
ViewModel

如您所见,我尝试了两种方法,但 private ObservableCollection<string> _updates; public ObservableCollection<string> Updates { get { return this._updates; } set { this._updates = value; OnPropertyChanged("Updates"); } } BackgroundWorker bw = new BackgroundWorker(); bw.DoWork += ((s, e) => { //logic UpdateProgress("Finished"); }); bw.RunWorkerAsync(); private void UpdateProgress(string s) { //Application.Current.Dispatcher.Invoke(() => // { App.Current.Dispatcher.Invoke(() => { this.Updates.Add(s); //}); }); } 始终为空。

奇怪的是,如果我在MainWindow后面的代码中使用相同的代码,那么以下工作正常

Current

我已经读过,原因是后面的MainWindow代码继承自Window。

我的问题是,我是否必须创建一个新的Dispatcher对象,或者是否有我遗漏的东西。我正在尝试做的就是在线程运行时更新我的​​GUI。

3 个答案:

答案 0 :(得分:1)

Hans Passant的评论中回答

  

WPF的正常入口点是Main()。哪个是自动生成的,用于创建App.xaml类实例,很难看到。入口点不再是加载项中的Main(),现在是Startup事件处理程序。所以你必须自己创建你的app实例。 Boilerplate代码为http://stackoverflow.com/a/2694710/17034

Application.Current and App.Current is null

答案 1 :(得分:0)

作为一种解决方法,您可以执行以下操作:

public MainWindow()
{
  InitializeComponent();
  AppWindow = this; // Here you set the static member to reference this MainWindow.
}

public static MainWindow AppWindow
{
  get;
  private set;
}

然后在你的viewmodel中:

private void UpdateProgress(string s)
{
  MainWindow.AppWindow.Dispatcher.Invoke(() =>
  {
    this.Updates.Add(s);
    //});
  });
}

答案 2 :(得分:-1)

如果您尝试从Winforms应用程序打开WPF应用程序,则Application.Current为null。 Application.Current只是WPF应用程序的一个功能,而不是Winforms。您可以尝试以下链接:

Why does Application.Current == null in a WinForms application?