UI function firing before quick event finishes

扶醉桌前 提交于 2020-01-14 17:52:52

问题


I have a web browser frame docked in a Silverlight application, and sometimes full-window XAML/Silverlight UI elements can pop up over it. The old problem, which I've more-or-less fixed, is that the web frame's contents didn't seem to play nice with the Silverlight content, always wanting to be rendered on top. This isn't really an issue now since I have an event that fires whenever an application-obscuring popup appears, but now there's a new problem.

My code that launches pop-ups looks like this:

public void OnModuleShown()
{
     if (ModuleShown != null)
         ModuleShown(this, new ModuleShownEventArgs());
}

public void ShowModule (string uri, string headerTitle, string message, string transition = "DefaultTransition")
{
    // Security and destination validation

    GetInfoFromURI(uri, out contentKey, out dataKey, out securityToken);

    OnModuleShown();

    ShowLoadingSpinner();

    _loadModule(contentKey, dataKey, securityToken, headerTitle, message, transition);
}

My code that handles the event looks like this:

private void Shell_ModuleShown(object sender, ModuleShownEventArgs e)
{
    if (browserFrame.Visibility == Visibility.Visible)
    {
        browserFrame.Visibility = Visibility.Collapsed;
        return;
    }
}

The new problem is that even though I call the event before I start loading and displaying the new module, and even though all the event is doing is changing a web frame's visibility, the module tends to appear first if the loading time is short. Since the module's appearance is animated, it looks even worse since the web frame seems to be waiting for the module to finish its animation before it vanishes.

Questions

Is there some kind of threading method I can use to address this? I really don't want to use Thread.Sleep but it's the only one I know of that would fix this without large program changes I can't make. Even better would be if there was a way to get this web frame to play along with Z-indexes or something similar.

I am using Visual Studio 2013, and my project's .NET Framework version is 4.0.

来源:https://stackoverflow.com/questions/33659444/ui-function-firing-before-quick-event-finishes

易学教程内所有资源均来自网络或用户发布的内容,如有违反法律规定的内容欢迎反馈
该文章没有解决你所遇到的问题?点击提问,说说你的问题,让更多的人一起探讨吧!