2012-06-26 5 views
1

Я выполняю надстройку надстройки Microsft PowerPoint Whit VSTO, которая читает информацию с аппаратного обеспечения, разработчики оборудования дали мне свой SDK для управления этим оборудованием, но у меня проблемы с его попыткой контролировать.Как я могу использовать объект после использования его в потоке STA?

У меня есть эта библиотека ARS

Существует класс ARS.BaseConnection

У меня этой переменной ARS.BaseConnection BaseConn;

Проблема заключается в том, когда я создаю новый объект типа BaseConnection

BaseConn = new ARS.BaseConnection(); 

Отладчик не отображает никаких исключений, POWERPNT.exe просто падает и останавливается.

Я попытался отладить POWERPNT, и он говорит, что Доступ к адресу записи нарушения доступа 0x00d20f78. Но я не программирую PowerPoint.

Я Источника, что демонстрационная программа в SDK (который на самом деле работает) имеет [STAThread] перед основным, так что я думаю, что он должен быть запущен как STA, так что я создать новую тему:

ARS.BaseConnection BaseConn;` 

    public form1() 
    { 
     InitializeComponent(); 

     System.Threading.Thread thread = new System.Threading.Thread(createBase); 
     thread.SetApartmentState(System.Threading.ApartmentState.STA); 
     thread.Start(); 
     thread.Join(); 

     BaseConn.Open(); // There is the problem, when I'm trying to use open() BaseConn debuger says: COM object that has been separated from its underlying RCW cannot be used. 
    } 

    private void createBase() 
    { 
     BaseConn = new ARS.BaseConnection(); //If it runs in a STA tread doesn't crash. 
    } 

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

Как это сделать?

+0

Код, который вы опубликовали, просто не является законным, объект мертв после окончания потока. Вам понадобится помощь от продавца, чтобы преследовать этот крах. –

ответ

0

Доступ к этому объекту возможен только из его создающей нити.

Если вам нужно получить доступ к объекту из другого потока, вы можете переключиться на его поток, используя dispatcher.

Подумайте о создании его на основной теме (сначала установите основную резьбу в STA).

+1

Проблема заключается в том, что нет основного потока, является надстройкой PowerPoint, я пытаюсь использовать [STAThread] перед public Form1 перед createBase(), но все равно сбой, я не знаю, не проблема ли это, STA o не переходит в STA. – oscargilfc

+0

Можете ли вы разместить точку останова и посмотреть, является ли текущий поток STA или нет? (И, возможно, если это основной поток или нет.) Также попробуйте использовать «windbg» и «инструменты отладки для окон», чтобы исследовать потоки в процессе. –

 Смежные вопросы

  • Нет связанных вопросов^_^