backgroundWorker的目的是什么?(我可以获得一些示例代码来理解吗?)

Gol*_*old 7 c#

backgroundWorker的目的是什么?(我可以获得一些示例代码来理解吗?)

提前致谢

ADB*_*ADB 22

后台工作线程可以帮助将长时间运行的函数调用卸载到后台,以便接口不会冻结.

假设您在单击按钮时需要花费5秒的时间进行计算.在此期间,界面将显示为"冻结":您将无法与其进行交互.

如果您使用后台工作线程,则按钮事件将设置工作线程并立即返回.这将允许界面继续接受新事件,如其他按钮点击.

至于这里的代码是2个例子:

这里界面将冻结

protected void OnClick( object sender, EventArgs e )
{
    CallLongRunningFunction(); // will take 5 seconds 
}
Run Code Online (Sandbox Code Playgroud)

在这里,它不会因为OnClick将立即返回而长时间运行的函数将在另一个线程中执行.

protected void OnClick( object sender, EventArgs e )
{
     BackgroundWorker bg = new BackgroundWorker();
     bg.DoWork += new DoWorkEventHandler(bg_DoWork);
     bg.RunWorkerAsync();
}

void bg_DoWork(object sender, DoWorkEventArgs e)
{
     BackgroundWorker worker = sender as BackgroundWorker;
     CallLongRunningFunction(); // will take 5 secs
}
Run Code Online (Sandbox Code Playgroud)

行为的差异是因为对后台工作线程的调用不会在与接口相同的线程中执行,从而释放它以继续其正常工作.