c# - 是否有任何等效于使用 C# 限制对一个线程的访问的访问修饰符?

标签 c# .net multithreading access-modifiers

基本上,我很好奇是否有什么东西可以让下面的事情发生。

class MyClass
{
    public void MyMethod() { }

    public void MyNonThreadMethod() { }
}

public void OtherThread(MyClass myObject)
{
    Thread thread = new Thread(myObject.MyMethod);
    thread.Start(); // works

    thread = new Thread(myObject.MyNonThreadMethod);
    thread.Start(); // does not work
}

问候,安东

最佳答案

根据您的示例,我假设您需要实现一个只能在单个指定线程上执行的方法。为此,您可以使用线程静态字段来标识指定的线程——例如,通过在构造函数中设置标志。

class MyClass
{
    [ThreadStatic]
    bool isInitialThread;

    public MyClass()
    {
        isInitialThread = true;
    }

    public void MyMethod() { }

    public void MyNonThreadMethod() 
    {
        if (!isInitialThread)
            throw new InvalidOperationException("Cross-thread exception.");
    }
}

不要为此目的使用 ManagedThreadId – 参见 Managed Thread Ids – Unique Id’s that aren’t Unique .

关于c# - 是否有任何等效于使用 C# 限制对一个线程的访问的访问修饰符?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36437450/

相关文章:

.net - HashSet.Intersect() 的顺序对性能有影响吗?

c# - 如何读取包含 Datetime 类型的 BaseHttpActionResult 的响应

.net - 在 XP 机器上启动 System.Net.HttpListener 需要哪些 Windows 服务?

c# - 使用 FolderBrowserDialog 时出现异常

multithreading - iOS 9 核心数据线程

c# - 如何与 Azure 解决方案分开部署静态内容?

c# - 开发 Windows Phone 8、SQL Server Express 或 SQL Server Compact 或 SQLite 时最好使用什么?

c# - 检查一个字符串是否是回文

c# - 好奇的用户在应用程序处于后台进程时按键,如何忽略这种类型的额外按键

python - pygame中的异步图像加载