在数据密集型操作之前,WPF上下文菜单不会完全关闭

时间:2015-02-05 16:56:49

标签: wpf contextmenu dispatcher

我有一个WPF应用程序,其中通过上下文菜单选择调用数据密集型操作。

我正在使用Dispatcher在后台运行数据密集型操作,但上下文菜单在开始之前并未完全关闭 - 它开始关闭(即淡入淡出)但在操作开始之前并未完全消失。结果是,当我的“执行”消息显示并且数据操作完成时,屏幕上打开一个看起来邋f的半褪色上下文菜单。

我知道有一个单独的“呈现”线程在WPF应用程序的后台运行,在我看来,上下文菜单的关闭操作正在完成,但是淡出上下文菜单的渲染事件是在数据密集型操作开始之前没有完成。

这是我的代码:

private void mnuAddProblem_Click(object sender, RoutedEventArgs e)
{
    CareGuide selectedCareGuide = (CareGuide)grdCareGuides.SelectedItem;
    List<Problem> selectedProblems = new List<Problem>();

    for (int i = 0; i < grdSuggestedProblems.SelectedItems.Count; i++)
    {
        selectedProblems.Add((Problem)grdSuggestedProblems.SelectedItems[i]);
    }

    LoadingWindow loader = new LoadingWindow();
    loader.Owner = this;
    loader.WindowStartupLocation = WindowStartupLocation.CenterOwner;

    BackgroundWorker worker = new BackgroundWorker();
    worker.DoWork += delegate
    {
        Dispatcher.BeginInvoke(new Action(delegate { loader.ShowDialog(); }));
        Dispatcher.Invoke((Action)(() => { dataWorker.AddSuggestedProblems(selectedProblems, selectedCareGuide); }));
        Dispatcher.BeginInvoke(new Action(delegate() { loader.Close(); }));
    };
    worker.RunWorkerAsync();                   
}

1 个答案:

答案 0 :(得分:1)

我能够通过覆盖控制弹出动画的系统参数来禁用打开和关闭上下文菜单时出现的“淡化”动画来解决这个问题:

<PopupAnimation x:Key="{x:Static SystemParameters.MenuPopupAnimationKey}">None</PopupAnimation>