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

245
28 декабря 2017, 22:02

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

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

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

Answer 1

Apartment State - это понятие из COM (Component Object Model). Когда вы используете некоторые компоненты, они могут потребовать определенного режима многопоточности. Даже если вы сами не используете COM - вы можете использовать какой-то из компонентов COM косвенно.

Когда вы устанавливаете потоку ApartmentState - вы сообщаете всем компонентам о режиме многопоточности этого потока и тем самым даете определенные обещания. Которые придется выполнить если вам не нужны баги в неожиданных местах.

ApartmentState.STA означает что

  1. поток обрабатывает очередь сообщений Windows (например, через вызов Application.Run или периодические вызовы Application.DoEvents);
  2. поток никогда не замораживается надолго.

Кстати, я почему-то уверен что CopyFiles нарушает оба этих условия.

ApartmentState.MTA же

  1. означает разрешение COM-компонентам занимать поток на неопределенное время;
  2. требует использование примитивов синхронизации из-за возможного многопоточного доступа.
READ ALSO
“ перехватывание” скобки в Visual Studio 2017 [требует правки]

“ перехватывание” скобки в Visual Studio 2017 [требует правки]

Всем доброго времени суток ! Есть проблема описание я не смогу составить поетому сразу смотрите видео : https://drivegoogle

234
Разбить текст по 2 и 1 слову в массив

Разбить текст по 2 и 1 слову в массив

Как разбивать текст ещё и по 2 слова в массив исключая разнообразные символы, а не только по 1 ?

258
Как запустить файл по его расширению?

Как запустить файл по его расширению?

Подскажите, как запускать файл, например с расширением *txt через приложение, которое увидит его расширение и запустит форму?

277