Рассмотрим следующий код (создайте пустую надстройку VSTO Word 2010 и вставьте ее):
using System.Diagnostics;
using System.Windows;
using System.Windows.Interop;
using Action = System.Action;
namespace WordAddIn1HangTest
{
public partial class ThisAddIn
{
private void ThisAddIn_Startup(object sender, System.EventArgs e)
{
Window window1 = new Window();
window1.Content = "1";
Window window2 = new Window();
window2.Content = "2";
WindowInteropHelper windowInteropHelper1 = new WindowInteropHelper(window1);
WindowInteropHelper windowInteropHelper2 = new WindowInteropHelper(window2);
System.Windows.Threading.Dispatcher.CurrentDispatcher.BeginInvoke(new Action(() =>
{
windowInteropHelper1.Owner = Process.GetCurrentProcess().MainWindowHandle;
window1.ShowDialog();
MessageBox.Show("Hello");
}));
System.Windows.Threading.Dispatcher.CurrentDispatcher.BeginInvoke(new Action(() =>
{
windowInteropHelper2.Owner = windowInteropHelper1.Handle;
window2.ShowDialog();
}));
System.Windows.Threading.Dispatcher.CurrentDispatcher.BeginInvoke(new Action(() =>
{
window1.Close();
}));
}
private void ThisAddIn_Shutdown(object sender, System.EventArgs e)
{
}
#region VSTO generated code
/// <summary>
/// Required method for Designer support - do not modify
/// the contents of this method with the code editor.
/// </summary>
private void InternalStartup()
{
this.Startup += new System.EventHandler(ThisAddIn_Startup);
this.Shutdown += new System.EventHandler(ThisAddIn_Shutdown);
}
#endregion
}
}
Он закрывает модальный диалог, у которого вместо этого есть другой модальный дочерний элемент. Я знаю, что это не обычное поведение, но я не нашел ничего, говорящего о том, что это ошибка, и на самом деле это работает в приложении WPF, оно зависает только в надстройке VSTO.
Поскольку мы закрываем окно1, мы должны увидеть приветственное сообщение, которое никогда не приходит.
Должен ли я заполнить Microsoft
ошибку?