Вызывающий поток должен быть STA, потому что многие компоненты пользовательского интерфейса требуют этого

Самый быстрый способ обойти ошибку - добавить параметр -k где-нибудь в вашем запросе на завивание. Этот параметр «позволяет подключаться к SSL-ссылкам без сертификатов». (from curl --help)

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

Например:

$ curl -o /usr/bin/apt-cyg https://raw.github.com/cfg/apt-cyg/master/apt-cyg

дал мне следующий ответ об ошибке:

curl: (77) error setting certificate verify locations:
  CAfile: /usr/ssl/certs/ca-bundle.crt
  CApath: none

Я добавил в -k:

curl -o /usr/bin/apt-cyg https://raw.github.com/cfg/apt-cyg/master/apt-cyg -k

и сообщение об ошибке. В качестве бонуса теперь у меня установлен apt-cyg. И ca-сертификаты.

145
задан Peter Mortensen 31 July 2015 в 19:51
поделиться

2 ответа

Я подозреваю, что вы получаете обратный вызов компонента пользовательского интерфейса из фонового потока. Я рекомендую выполнить этот вызов с помощью BackgroundWorker, поскольку он поддерживает потоки пользовательского интерфейса.

Для BackgroundWorker основная программа должна быть помечена как [STAThread].

15
ответ дан 23 November 2019 в 22:05
поделиться

Если вы выполняете вызов из основного потока, вы должны добавить атрибут STAThread к методу Main, как указано в предыдущем ответе.

Если вы используете отдельный поток, он должен быть в STA (однопоточном подразделении), чего нельзя сказать о фоновых рабочих потоках. Вы должны создать поток самостоятельно, например:

Thread t = new Thread(ThreadProc);
t.SetApartmentState(ApartmentState.STA);

t.Start();

где ThreadProc является делегатом типа ThreadStart.

133
ответ дан 23 November 2019 в 22:05
поделиться
Другие вопросы по тегам:

Похожие вопросы: