0

我环顾了谷歌,因为我的程序在尝试加载 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 组件都需要这个。

所以再次上网研究后,我找不到任何使用该类加载用户控件的场景。所以我转向社区寻求帮助....帮助?

4

2 回答 2

0

尝试像这样在 UI 调度程序上设置页面内容 -

App.Current.Dispatcher.BeginInvoke((Action)delegate{ thePage.Content = crowder; });
于 2012-07-31T07:46:02.990 回答
0

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

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

希望它有帮助:-)

于 2012-07-31T06:35:31.553 回答