使用BackgroundWorker创建新用户控件失败



我在谷歌上到处找过,因为每当我的程序试图加载gif和加载用户控件时,它都会滞后,所以我需要多线程。相反,gif挂起,页面突然显示我的用户控制,没有任何转换。好的程序应该如何运行,

显示gif-->加载用户控件-->隐藏gif-->运行动画(效果简单的幻灯片)

但是,由于呈现用户控件的ui元素时存在滞后,该程序的行为与类似

显示Gif-->Gif挂起(或冻结)-->立即显示用户控制

所以我找到了一个叫做BackgroundWorker的东西。听起来不错。好并非完全如此。我试过了,并把它应用到我的代码中,就像一样

        BackgroundWorker worker = new BackgroundWorker();
        CrowdWatch_Portrait.CrowdWatch crowder;
        //The page is a frame fyi
        thePage.LoadCompleted += new LoadCompletedEventHandler(thePage_LoadCompleted);
        worker.DoWork += delegate(object s, DoWorkEventArgs args)
        {
                crowder = new CrowdWatch_Portrait.CrowdWatch();
                thePage.Content = crowder;
        };

        worker.RunWorkerAsync();

听起来不错。运行它。失败。它给了我这个错误

调用线程必须是STA,因为许多UI组件都需要它。

因此,在再次在线研究后,我找不到任何使用此类加载用户控件的场景。所以我向社区寻求帮助。。。。帮助

我不记得确切的原因,但在我的一个程序中,我遇到了同样的错误。我用这个代码解决了问题:

_wakeupthread.SetApartmentState(System.Threading.ApartmentState.STA);

希望有帮助:-)

试着在UI调度器上设置这样的页面内容-

App.Current.Dispatcher.BeginInvoke((Action)delegate{ thePage.Content = crowder; });

最新更新