Есть ли что-нибудь эквивалентное модификатору доступа, который ограничивает доступ только к одному потоку с использованием C#?

В принципе, мне любопытно, есть ли что-то, что могло бы сделать следующее.

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
}

С уважением, Антон

1 ответ

Решение

Из вашего примера я предполагаю, что вам нужно реализовать метод, который может выполняться только в одном назначенном потоке. Чтобы достичь этого, вы могли бы использовать потоковое статическое поле для идентификации назначенного потока - например, установив флаг из конструктора.

class MyClass
{
    [ThreadStatic]
    bool isInitialThread;

    public MyClass()
    {
        isInitialThread = true;
    }

    public void MyMethod() { }

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

Не использовать ManagedThreadId для этой цели - см. Управляемые идентификаторы потоков - Уникальные идентификаторы, которые не являются уникальными.

Другие вопросы по тегам