0

我是 Windows 手机应用程序开发的新手。在我的一个页面上,我有一个可以完成大量工作的按钮。因此,当我按下按钮时,屏幕会冻结,然后在所有工作完成后恢复。现在我想展示一些在此期间要显示的等待图像或页面。

因此,我分别在按钮单击操作的开始和结束时在页面顶部创建和销毁了一个图像,但它仍然冻结并且只有在所有工作完成后才会呈现屏幕,使其无动于衷。我正在使用 Silverlite C#。

4

1 回答 1

2

您需要将繁重的工作推到后台线程上。当前发生的是工作正在 UI 线程上完成,因此它“冻结”,因为 UI 线程正在等待工作完成。有多种方法可以将工作推送到后台线程。一种方法是使用BackgroundWorker

一个简单的例子,它不包括在工作完成时报告之类的东西,看起来像这样

BackgroundWorker bw = new BackgroundWorker();
bw.DoWork += new DoWorkEventHandler(BW_DoWork);
bw.RunWorkerAsync();

private void BW_DoWork(object sender, DoWorkEventArgs e)
{
    //Your heavy work code
}

在后台线程上工作时要记住的重要一点是,如果要更改 UI 上的任何内容,则需要将数据编组到 UI 线程并在那里进行更新。你可以这样做:

Deployment.Current.Dispatcher.BeginInvoke(() => {
       myTextBlockExample.Text = "Changing the UI";           
}

如果您尝试在TextBlock没有该Dispatcher.BeginInvoke方法的情况下更改 ,则会出现Invalid Cross-Thread Access错误。如果您在 WP 开发中看到该错误,则很可能您正在尝试从非 UI 线程更新 UI 元素。

您可以在调用之前放置显示加载图像的代码bw.RunWorkerAsync

于 2012-10-07T14:51:43.937 回答