【问题标题】:Creating UIElements outside Ui thread, Silverlight在 UI 线程之外创建 UIElements,Silverlight
【发布时间】:2012-07-23 13:46:23
【问题描述】:

在我的 silverlight 4.0 应用程序中,有一次,在用户按下按钮后,我必须创建一些需要一些时间(5-10 秒)的 UI 对象。在此期间,用户界面当然会冻结。我决定将这些对象的创建放在后台工作人员中,这样 UI 至少可以显示进度条。

但是这个解决方案不起作用。要创建 UI 对象,您必须在 UI 线程中。 如果我将这些对象的创建放在Dispatcher.BeginInvoke() 中,那么我的 UI 会再次冻结。在大多数情况下甚至没有显示进度条。有没有办法解决这个问题?

silverlight 在后台创建 UI 对象时我可以显示进度条吗?

【问题讨论】:

    标签: multithreading silverlight c#-4.0 backgroundworker uielement


    【解决方案1】:

    看看这个论坛post。它可能会有所帮助。

    而不是使用:

    System.Windows.Threading.Dispatcher.BeginInvoke(() => {});
    

    他们使用:

    System.Windows.Deployment.Current.Dispatcher.BeginInvoke(() => {});
    

    【讨论】:

      【解决方案2】:

      您可以在BeginInvoke() 中创建 UI 对象之前尝试显示自定义消息。

      例子:

      private void CreateObjects()
      {
          myMsg.Text = "Loading...";
          Dispatcher.BeginInvoke(() => { AddObjects() });
      }
      

      创建所有对象后,禁用该消息。

      您也可以使用进度条尝试类似的事情。

      【讨论】:

      • 是的,但是要显示 myMsg 你需要访问 UIThread,如果对象是在同一个线程上创建的,那么 UI 将没有时间更新
      • 我在这里想说的是,您可以在更新进行时显示一条消息,而不是进度条。当然,您需要在 UIThread 中执行此操作。顺便说一句,你试过这个吗?
      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2011-06-22
      • 1970-01-01
      相关资源
      最近更新 更多