Как установить состояние квартиры потока, обслуживающего вызов .Net Remoting? - PullRequest
2 голосов
/ 07 октября 2010

Клиент и сервер моей программы помечены как STAThread, и в отладчике я проверил, что поток, из которого я выполняю вызов, помечен как STA.На стороне сервера я проверил, что сама программа при настройке сервера помечена как STA.Однако фактический вызов удаленного взаимодействия .Net осуществляется через поток, помеченный как MTA.Есть ли способ изменить это поведение, когда мой метод обслуживания обращается к ресурсам, для которых требуется поток STA.

Ответы [ 2 ]

2 голосов
/ 07 октября 2010

Remoting не может этого сделать, жестким требованием для потока STA является то, что он также прокачивает цикл сообщений.Вы действительно должны будете создать свой собственный поток, используйте Thread.SetApartmentState (), чтобы переключить его на STA до того, как запустит его.И используйте Application.Run () с фиктивной формой, чтобы запустить цикл обработки сообщений.Затем вы можете использовать Control.BeginInvoke () для перенаправления вызова из потока удаленного взаимодействия в этот новый поток.

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

    protected override void SetVisibleCore(bool value) {
        if (!this.IsHandleCreated) {
            this.CreateHandle();
            value = false;
        }
        base.SetVisibleCore(value);
    }
1 голос
/ 07 октября 2010

Вы можете создать другой поток и пометить его как STA для чтения ресурсов. Я предполагаю, что он не будет использоваться для доступа к COM-объектам и так далее. В этом случае все должно быть в порядке, но есть дополнительные затраты на создание этого дополнительного потока.

...