Страницы

Поиск по вопросам

пятница, 14 февраля 2020 г.

В чем практический смысл метода SetApartmentState?

#c_sharp #многопоточность


Работал с потоками и появился вопрос, когда увидел вот этот код:

var thCopy = new Thread(CopyFiles);
thCopy.SetApartmentState(ApartmentState.STA)


Что означает вторая строчка? Пожалуйста, кто работает с потоками и может дать ответ
- подскажите.
    


Ответы

Ответ 1



Apartment State - это понятие из COM (Component Object Model). Когда вы используете некоторые компоненты, они могут потребовать определенного режима многопоточности. Даже если вы сами не используете COM - вы можете использовать какой-то из компонентов COM косвенно. Когда вы устанавливаете потоку ApartmentState - вы сообщаете всем компонентам о режиме многопоточности этого потока и тем самым даете определенные обещания. Которые придется выполнить если вам не нужны баги в неожиданных местах. ApartmentState.STA означает что поток обрабатывает очередь сообщений Windows (например, через вызов Application.Run или периодические вызовы Application.DoEvents); поток никогда не замораживается надолго. Кстати, я почему-то уверен что CopyFiles нарушает оба этих условия. ApartmentState.MTA же означает разрешение COM-компонентам занимать поток на неопределенное время; требует использование примитивов синхронизации из-за возможного многопоточного доступа.

Комментариев нет:

Отправить комментарий