#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-компонентам занимать поток на неопределенное время; требует использование примитивов синхронизации из-за возможного многопоточного доступа.
Комментариев нет:
Отправить комментарий