gpt4 book ai didi

c# - 传入和传出后台 worker 的数据会发生什么变化?

转载 作者:太空狗 更新时间:2023-10-29 22:20:21 24 4
gpt4 key购买 nike

传入和传出后台工作程序的数据会怎样?

使用 RunWorkerAsync 将数据从主线程传递到后台 worker:

backgroundWorker.RunWorkerAsync(myData);

这是在后台线程的 DoWork 事件处理程序中接收到的:

myData = (Data)e.Argument;

DoWork 处理完数据后,使用 e.Result 返回:

e.Result = myData;

这是在主线程中的 RunWorkerCompleted 事件处理程序中接收到的:

myData = (Data)e.Result;

BackgroundWorker 负责在线程之间传递数据。我期望将大量数据传入和传出后台工作程序,因此我想知道此传输的开销是多少,以及是否有更好的方法在后台工作程序中处理大量内存中的对象。我还想知道是否有可能以线程安全的方式从主线程访问后台工作程序中的数据。

作为引用,我使用的是 C#、.Net 3.5 和 Windows Forms。

最佳答案

确实没有开销(假设 Data 是一个类),因为只传递了引用。数据本身不会“复制”到线程中 - 所有线程都可以访问进程中的数据(大部分情况下)。

I would also like to know it is possible to access the data in the background worker from the main thread in a thread-safe manner.

是的,可以访问数据,但为了以线程安全的方式进行,您需要自己管理同步。这通常需要类似 lock 的东西,尽管有很多选项取决于您要完成的任务。

关于c# - 传入和传出后台 worker 的数据会发生什么变化?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6603629/

24 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com