Есть ли что-нибудь эквивалентное модификатору доступа, который ограничивает доступ только к одному потоку с использованием 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
для этой цели - см. Управляемые идентификаторы потоков - Уникальные идентификаторы, которые не являются уникальными.