【问题标题】:Closing WPF hosted in Outlook关闭 Outlook 中托管的 WPF
【发布时间】:2018-06-10 16:39:40
【问题描述】:

我正在制作启动 WPF 窗口的 Outlook vsto 插件。
它工作正常,但是当我关闭 WPF 窗口并尝试打开另一个窗口时,我得到了一个

不能在同一个 AppDomain 中创建多个 System.Windows.Application 实例。

异常。

我知道 Application 类是单例的,我理解异常,但我不知道如何在窗口关闭时关闭应用程序。我尝试在 App.xaml 中设置ShutdownMode 并在窗口关闭时设置App.Shutdown(),但没有成功。有关如何使其工作的任何建议?

App.xaml

<Application x:Class="OutlookAddIn3.App"
         xmlns="http://schemas.microsoft.com/winfx/2006/xaml/presentation"
         xmlns:x="http://schemas.microsoft.com/winfx/2006/xaml"
         xmlns:local="clr-namespace:OutlookAddIn3"
         StartupUri="MainWindow.xaml"
         ShutdownMode="OnMainWindowClose">
<Application.Resources>
    <ResourceDictionary>
        <ResourceDictionary.MergedDictionaries>
            <ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.Light.xaml" />
            <ResourceDictionary Source="pack://application:,,,/MaterialDesignThemes.Wpf;component/Themes/MaterialDesignTheme.Defaults.xaml" />
            <ResourceDictionary Source="pack://application:,,,/MaterialDesignColors;component/Themes/Recommended/Primary/MaterialDesignColor.DeepPurple.xaml" />
            <ResourceDictionary Source="pack://application:,,,/MaterialDesignColors;component/Themes/Recommended/Accent/MaterialDesignColor.Lime.xaml" />
        </ResourceDictionary.MergedDictionaries>
    </ResourceDictionary>
</Application.Resources>

App.xaml.cs

public partial class App : Application
{
    public static App myapp;
    public App()
    {
        InitializeComponent();
    }

    public static void EnsureApplicationResources()
    {
        if (App.myapp == null)
        {
            myapp = new App();
        }                                
    }
}

MainWindow.cs

    public partial class MainWindow : Window
{
    public MainWindow()
    {
        InitializeComponent();
    }

    private void Window_Closing(object sender, EventArgs e)
    {
        //App.Current.Shutdown();
        App.myapp.Shutdown();
    }
}

Ribbon1.cs

public partial class Ribbon1
{
    private void button1_Click(object sender, RibbonControlEventArgs e)
    {
        App.EnsureApplicationResources();
    }
}

【问题讨论】:

    标签: c# wpf vsto


    【解决方案1】:

    您需要将myapp 字段设置为null,以便在您下次调用EnsureApplicationResources() 时创建一个新的App 对象:

    private void button1_Click(object sender, RibbonControlEventArgs e)
    {
        App.myapp = null;
        App.EnsureApplicationResources();
    }
    

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2012-11-25
      • 2012-07-21
      • 2011-06-25
      • 2012-10-17
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多