2016-04-05 6 views
3

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

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

+2

'[MethodImpl (MethodImplOptions.Synchronized)]' – Eser

+1

@Eser Спасибо! – Anton

+0

Вы можете использовать семафор наподобие waitone: https://msdn.microsoft.com/en-us/library/cc189907(v=vs.110).aspx – jdweng

ответ

3

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

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.

 Смежные вопросы

  • Нет связанных вопросов^_^