当我的主表单加载时,我想做一些处理,比如加载最后一个查看的客户端。这种额外的处理导致表格的绘制非常难看。我是在显示的表格上做的,所以我希望表格会完成绘画。
我用过 PostMessage... 有现代版的 PostMessage 吗?在此处理过程中,我想设置沙漏光标。
我认为您正在尝试做的是后台处理。所以你可以使用BackgroundWorker 类。当您的表单加载时,您将启动后台工作人员,当工作人员完成时,它将通过 RunWorkerCompleted 事件通知您的表单。您甚至可以通过实现 ProgressChanged 事件从工作人员那里获取进度更新。
如何使用 Task
+ ContinueWith
。(如果升级到 .Net 4.5 async/await 会是更好的选择)。
private void Form_Load(object sender, EventArgs e)
{
Task.Factory.StartNew(() =>
{
Thread.Sleep(5000); //Some long Running Jobs
return "Finished";
})
.ContinueWith(t =>
{
this.Text = t.Result; //Update GUI
},
TaskScheduler.FromCurrentSynchronizationContext());
}
我不确定你为什么要使用PostMessage
. 如果您使用PostMessage
它发布消息,最终将获得GetMessage
,除非该消息是从不同的线程发布的,否则整个练习似乎有点徒劳。我在这里错过了什么吗?至于BackgroundWorker
解决方法请参考Label is not set until method is done。