我有一个网页,其中包含一个按钮来执行一些耗时的工作(以我为例下载一些图像)。在按钮处理程序中,我创建了一个任务,并为其附加了一个继续任务,以便在下载结束时我想操作UI。
问题是,尽管任务正确完成并且达到了继续任务,但UI从未改变。
这是按钮处理程序代码的一部分:
var uiThreadScheduler = TaskScheduler.FromCurrentSynchronizationContext();
Task t = new Task(DownloadImage, item, TaskCreationOptions.LongRunning);
t.ContinueWith((task) =>
{
ImageItem i = (ImageItem)task.AsyncState;
lb_Success.Text = "Download done";// not working
ScriptManager.RegisterStartupScript(this, GetType(), "MyScript", "alert('here');", true); // for test, also not working
}, uiThreadScheduler);
t.Start();
这是DownloadImage:
private void DownloadImage(object state)
{
try
{
ImageItem item = (ImageItem)state;
using (WebClient webClient = new WebClient())
{
webClient.Proxy = null;
var result = webClient.DownloadData(item.url);
item.imageBytes = result;
}
}
catch (Exception ex)
{
Errors.printError("Failed to download image");
}
}