我环顾谷歌导致我需要进行mutithread,因为我的程序在尝试加载gif并同时加载用户控件时会滞后。相反,gif挂起,页面突然显示我的usercontrol没有任何转换。好的程序应该如何表现,
显示gif - >加载用户控件 - >隐藏Gif - >运行动画(有效的简单幻灯片)
但由于渲染usercontrol的ui元素时出现滞后,程序的行为如下
显示Gif - > Gif挂起(或冻结) - >立即显示Usercontrol
所以我发现这个东西叫做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组件都需要这个。
因此,在再次在线研究之后,我找不到任何使用此类加载用户控件的场景。所以我转向社区寻求帮助....帮忙?
答案 0 :(得分:0)
我不记得原因,但在我的一个程序中,我遇到了同样的错误。 我解决了这段代码:
_wakeupthread.SetApartmentState(System.Threading.ApartmentState.STA);
希望它有所帮助:-)
答案 1 :(得分:0)
尝试在UI调度程序上设置页面内容,如下所示 -
App.Current.Dispatcher.BeginInvoke((Action)delegate{ thePage.Content = crowder; });