c #: управление доступом к объекту из разных потоков - PullRequest
0 голосов
/ 30 сентября 2010

Как мне контролировать, когда потоку разрешен доступ к объекту, а когда нет.

Например, если у меня есть ситуация, подобная приведенной ниже, я хочу убедиться, что когда я что-то делаю с objFoo в моем событии ButtonClick, я не смогу коснуться objFoo из моего doSomethingWithObjFoo метода.

private void button1_Click(object sender, EventArgs e) {
    // doing something with objFoo
}

private void timer1_Tick(object sender, EventArgs e) {
    Thread T = new Thread(new ThreadStart(doSomethingWithObjFoo));
    T.Start();
}

private void doSomethingWithObjFoo(){
    // doing something else with objFoo
}

Ответы [ 2 ]

5 голосов
/ 30 сентября 2010

Возможно, самый простой способ - использовать lock:

private object _fooLock = new object();
private void button1_Click(object sender, EventArgs e) {
    lock(_fooLock)
    {
        // doing something with objFoo
    }
}

private void timer1_Tick(object sender, EventArgs e) {
    Thread T = new Thread(new ThreadStart(doSomethingWithObjFoo));
    T.Start();
}

private void doSomethingWithObjFoo(){
    lock(_fooLock)
    {
       // doing something else with objFoo
    }
}

Существуют и другие варианты, такие как ReaderWriterLockSlim.

1 голос
/ 30 сентября 2010

То, что мы используем lock для.

Синхронизация потоков необходимо прочитать.

public class TestThreading
{
    private System.Object lockThis = new System.Object();

    public void Process()
    {

        lock (lockThis)
        {
            // Access thread-sensitive resources.
        }
    }

}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...