Я получаю это исключение при чтении форм в листе Excel в c #:
в строке кода
if (worksheet.Shapes.Count >= iCurrentRowIndex)
{ }
Невозможно привести COM-объект типа
'System .__ ComObject' для типа интерфейса
'Microsoft.Office.Interop.Excel._Worksheet.
Эта операция не удалась, потому что
QueryInterface вызов на COM
компонент для интерфейса с IID
'{000208D8-0000-0000-C000-000000000046}
не удалось из-за следующей ошибки:
Приложение называется интерфейсом, который
был назначен для другой темы.
(Исключение из HRESULT: 0x8001010E
(RPC_E_WRONG_THREAD)).
Отредактировано:
Это приложение отлично работает локально, но при развертывании его на IIS возникает исключение. В чем причина? Я использую код для потока как
string strImageSavedPath = string.Empty;
ThreadStart cbThreadStater = delegate { strImageSavedPath = CopyToClipBoard(worksheet, (int)iRowindex, strApplicationPath); };
Thread thrd = new Thread(cbThreadStater);
thrd.SetApartmentState(ApartmentState.STA);
thrd.Start();
thrd.Join();
Где метод CopyToClipBoard
читает изображение предоставленного индекса строки, сохраняет изображение в файловой системе и возвращает путь.
System.InvalidCastException не обработано. Message = "Невозможно привести
COM-объект типа 'System .__ ComObject' для типа интерфейса
'Microsoft.Office.Interop.Excel._Worksheet. Эта операция не удалась
потому что QueryInterface вызов COM-компонента для интерфейса
с IID '{000208D8-0000-0000-C000-000000000046}' не удалось из-за
следующая ошибка: приложение вызвало интерфейс, который был
встал на другую ветку. (Исключение из HRESULT: 0x8001010E
(RPC_E_WRONG_THREAD)). "Source =" Microsoft.Office.Interop.Excel "
Трассировки стека:
в Microsoft.Office.Interop.Excel._Worksheet.get_Shapes ()
в KGD6ExcelReader.ExcelManager.CopyToClipBoard (рабочий лист, Int32 iRowindex, String strApplicationPath) в
D: \ ParallelMinds \ Shared \ KGD6ExcelReader \ KGD6ExcelReader \ ExcelManager.cs: линия
522
в KGD6ExcelReader.ExcelManager. <> c__DisplayClass3.b__0 ()
в
D: \ ParallelMinds \ Shared \ KGD6ExcelReader \ KGD6ExcelReader \ ExcelManager.cs: линия
376
в System.Threading.ThreadHelper.ThreadStart_Context (состояние объекта)
в System.Threading.ExecutionContext.runTryCode (объект userData)
в System.Runtime.CompilerServices.RuntimeHelpers.ExecuteCodeWithGuaranteedCleanup (TryCode
код, CleanupCode backoutCode, Object userData)
в System.Threading.ExecutionContext.RunInternal (ExecutionContext
выполнениеContext, обратный вызов ContextCallback, состояние объекта)
в System.Threading.ExecutionContext.Run (ExecutionContext executeContext, обратный вызов ContextCallback, состояние объекта)
в System.Threading.ThreadHelper.ThreadStart () InnerException: