我在谷歌上到处找过,因为每当我的程序试图加载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; });