0

当我的主表单加载时,我想做一些处理,比如加载最后一个查看的客户端。这种额外的处理导致表格的绘制非常难看。我是在显示的表格上做的,所以我希望表格会完成绘画。

我用过 PostMessage... 有现代版的 PostMessage 吗?在此处理过程中,我想设置沙漏光标。

4

3 回答 3

4

我认为您正在尝试做的是后台处理。所以你可以使用BackgroundWorker 类。当您的表单加载时,您将启动后台工作人员,当工作人员完成时,它将通过 RunWorkerCompleted 事件通知您的表单。您甚至可以通过实现 ProgressChanged 事件从工作人员那里获取进度更新。

于 2013-05-10T17:29:30.653 回答
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());

}
于 2013-05-10T18:04:01.283 回答
0

我不确定你为什么要使用PostMessage. 如果您使用PostMessage它发布消息,最终将获得GetMessage,除非该消息是从不同的线程发布的,否则整个练习似乎有点徒劳。我在这里错过了什么吗?至于BackgroundWorker解决方法请参考Label is not set until method is done

于 2013-05-10T17:44:17.773 回答