我是Windows手机应用开发的新手。在我的一个页面上,我有一个按钮,可以完成大量的工作。因此,当我按下按钮时,屏幕会冻结,然后在完成所有工作后恢复。现在我想在此期间显示一些等待的图像或页面。
因此,我分别在按钮点击操作的开始和结束时创建并销毁了页面顶部的图像,但它仍然冻结,并且屏幕仅在完成所有工作后才会呈现,使其无关紧要。我正在使用Silverlite C#。
答案 0 :(得分: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
之前放置显示加载图片的代码。