我是Windows手機應用程序開發的新手。在我的一頁上,我有一個按鈕,可以完成大量的工作。所以當我按下按鈕時,屏幕會凍結,然後在所有工作完成時恢復。現在我想在此期間展示一些等待的圖像或頁面。只要我將它添加到頁面,圖像沒有被渲染
因此,我分別在按鈕單擊動作的開始和結束時在頁面頂部創建並銷燬了一個圖像,但它仍然凍結,只有在所有工作完成後纔會呈現屏幕,使其無關緊要。我正在使用Silverlite C#。
我是Windows手機應用程序開發的新手。在我的一頁上,我有一個按鈕,可以完成大量的工作。所以當我按下按鈕時,屏幕會凍結,然後在所有工作完成時恢復。現在我想在此期間展示一些等待的圖像或頁面。只要我將它添加到頁面,圖像沒有被渲染
因此,我分別在按鈕單擊動作的開始和結束時在頁面頂部創建並銷燬了一個圖像,但它仍然凍結,只有在所有工作完成後纔會呈現屏幕,使其無關緊要。我正在使用Silverlite C#。
你會想把沉重的工作推到後臺線程上。目前發生的事情是,該工作正在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
之前,您可以將您的代碼顯示加載圖像。
你的第二段不太清楚。共享Button_click事件處理程序的代碼,以便識別您的問題很容易 – nkchandra