当我的主表单加载时,我想进行一些处理,例如加载查看的最后一个客户端。这种额外的处理导致表单的绘制非常难看。我在显示的表单上这样做,所以我希望表单可以完成绘画。
我使用过PostMessage ...是否有PostMessage的现代版本?在此处理过程中,我想设置沙漏光标。
答案 0 :(得分:4)
我认为你要做的是后台处理。所以你可以使用BackgroundWorker class。加载表单时,您将启动后台工作程序,当工作程序完成时,它将通过RunWorkerCompleted事件通知您的表单。您甚至可以通过实施ProgressChanged事件从工作人员获取进度更新。
答案 1 :(得分:1)
如何使用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());
}
答案 2 :(得分:0)
我不确定您为什么要使用PostMessage
。如果您使用PostMessage
发布消息,它最终将由GetMessage
获取,除非消息是从另一个帖子发布的,否则整个练习似乎有点徒劳。我在这里错过了什么吗?至于BackgroundWorker
,请参阅Label is not set until method is done的解决方案。