在数据密集型操作之前,WPF 上下文菜单不会完全关闭
WPF context menu won't fully close before data-intensive operation
我有一个 WPF 应用程序,其中通过上下文菜单选择调用数据密集型操作。
我正在使用 Dispatcher 运行 在后台进行数据密集型操作,但是上下文菜单在开始之前没有完全关闭 - 它开始关闭(即淡出)但没有消失完全在手术开始之前。结果是一个草率的半褪色上下文菜单在屏幕上打开,同时我的 "executing" 消息显示并且数据操作完成。
我知道有一个单独的 "rendering" 线程 运行 在 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();
}
我可以通过覆盖控制弹出动画的系统参数来禁用打开和关闭上下文菜单时出现的 "fading" 动画来解决此问题:
<PopupAnimation x:Key="{x:Static SystemParameters.MenuPopupAnimationKey}">None</PopupAnimation>
我有一个 WPF 应用程序,其中通过上下文菜单选择调用数据密集型操作。
我正在使用 Dispatcher 运行 在后台进行数据密集型操作,但是上下文菜单在开始之前没有完全关闭 - 它开始关闭(即淡出)但没有消失完全在手术开始之前。结果是一个草率的半褪色上下文菜单在屏幕上打开,同时我的 "executing" 消息显示并且数据操作完成。
我知道有一个单独的 "rendering" 线程 运行 在 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();
}
我可以通过覆盖控制弹出动画的系统参数来禁用打开和关闭上下文菜单时出现的 "fading" 动画来解决此问题:
<PopupAnimation x:Key="{x:Static SystemParameters.MenuPopupAnimationKey}">None</PopupAnimation>