为什么回拨没有立即到达

  • 本文关键字:回拨 c# multithreading
  • 更新时间 :
  • 英文 :


请参阅下面的代码:

public partial class Form1 : Form
{
SynchronizationContext sc;

public Form1()
{
InitializeComponent();
sc = SynchronizationContext.Current;
var _threadStart = new ThreadStart(LongProcess);
var _thread = new Thread(_threadStart);
_thread.Start();
//simulate a time consuming operation.
for (long l=0; l<100000000000000; l++)
{
}
}
private void callback()
{
Console.WriteLine("Reached callback method");
}
private void LongProcess()
{
sc.Post(
(o) => callback(), null);
}
}

只有在Form1构造函数完成后才能调用回调函数。是否有可能在构造函数仍在运行时访问回调?

没有,您已经将它排队返回到同一个线程(通过sc.Post(,在该线程有机会发送消息之前,它无法运行。

您已经将一个耗时的操作移到了后台线程,为什么不对第二个操作做同样的操作呢?

最新更新