c# - 需要有关线程安全的建议

标签 c# .net multithreading thread-safety clr

这样写代码安全吗?

        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/

相关文章:

c# - 在同一项目(SQL Server 和 MySql)中使用具有多个数据库和提供程序的 Entity Framework

javascript - 无法在代码后面请求 javascript 变量总是返回 ""

c# - 有谁知道这个错误 : "Wrong Local header signature: 0x6D74683C"?

.net - 在 Visual Studio 2017 中使用 Windows Silverlight 进行开发的解决方案?

Java Fork Join 池吃掉所有线程资源

java - 高性能流数据处理问题

c# - 如何制作通用存储库?

c# - 传递参数,是否发生拆箱

c# - 为什么 UTF8Encoding.GetBytes 不发出字节顺序标记?

c++ - C++ 标准中错误使用 std::memory_order::relaxed 的示例 [n4713 中的 algorithms.parallel.exec/5]