这样写代码安全吗?
var form = new Form();
Action callback =
() =>
{
// do something 1
};
ThreadPool.QueueUserWorkItem(
args =>
{
// do something 2
form.BeginInvoke(callback);
});
UPD 我担心访问“表单”变量的安全性。我从后台线程使用 BeginInvoke 方法;我可以确定在此之前不会有任何读/写重新排序吗? (从后台线程的角度来看,这可能会使“表单”变量处于不一致状态)
最佳答案
是的,看起来不错。变量 form
将被捕获,只要它不是 null
,当 ThreadPool 上的作业执行时它就应该工作。
但是你遗漏了很多细节,我假设这段代码全部来自 1 个方法。
//do something 1
可以访问 GUI,//do something 2
不能。
关于c# - 需要有关线程安全的建议,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/7751074/