-1

我正在尝试将鼠标光标更改为Wait任务开始之前和Arrow完成时。但是,光标似乎立即从一个变为另一个。这是我的代码:

this.Cursor = Cursors.Wait;
dtResults.WriteXml(saveFileDialog.FileName);
this.Cursor = Cursors.Arrow;
MessageBox.Show("Exporting Complete!", "Complete!", MessageBoxButton.OK, MessageBoxImage.Information);

关于我做错了什么的任何想法?

4

2 回答 2

2

您正在同步执行任务。因此,就用户所见而言,消息泵永远不会真正获得等待光标调用。

要解决此问题,您应该异步执行此操作。由于您使用的是 .NET 4.0,因此您可以使用任务并行库:

this.Cursor = Cursors.Wait
//Avoid any closure problems
string fileName = saveFileDialog.FileName
//Start the task of writing the xml (It will run on the next availabled thread)
var writeXmlTask = Task.Factory.StartNew(()=>dtResults.WriteXml(fileName));
//Use the created task to attach what the action will be whenever the task returns.
//Making sure to use the current UI thread to perform the processing
writeXmlTask.ContinueWith(
    (previousTask)=>{this.Cursor = Cursors.Arrow;MessageBox.Show....}, TaskScheduler.FromCurrentSynchronizationContext());
于 2013-02-18T17:55:09.700 回答
0

我的猜测是所有这些都发生在 UI 线程上。因为DataTable.WriteXml是同步完成的,所以它会阻塞 UI 并且不会进行任何更新。这就是为什么光标永远不会显示为等待光标的原因。

要允许 UI 更新并显示等待光标,您需要将调用移至dtResults.WriteXml后台线程。我建议使用BackgroundWorker

于 2013-02-18T17:56:27.790 回答