0
スレッドのAPIメソッドで配列を使用する際に問題があります。
アレイのロックが機能しませんでした。ロック配列Com例外
Thread thrCreate = new Thread(createThread);
thrCreate.SetApartmentState(ApartmentState.STA);
thrCreate.Start();
private void createThread()
{
IEdmAddCustomRefs2 pdmRefs = (IEdmAddCustomRefs2)vault2.CreateUtility(EdmUtility.EdmUtil_AddCustomRefs);
IEdmFile5 pdmRefFile = (IEdmFile5)pdmResult;
int[] iRefCount = new int[1];
iRefCount[0] = 1;
string[] strRefPath = new string[1];
strRefPath[0] = strPDFPath + strSerName + ".pdf";
lock (strRefPath)
{
lock (iRefCount)
{
pdmRefs.AddReferencesPath2(pdmRefFile.ID, ref strRefPath, ref iRefCount);
}
}
}
COM例外はDISP_E_ARRAYISLOCKEDと呼ばれます。
'lock'声明ここでは助けにはなりません。ここで
は、更新されたコードです。 HRESULTの名前で参照されるロックは、バリアントに含まれるCOM配列のロックです。 – Richard
このエラーは基本的に、ワーカースレッドでこのコードを実行することは良い考えではないことを示しています。 SolidWorksに可能なことを尋ねる必要がありますが、期待される応答は「しないでください」です。 –
'IEdmAddCustomRefs2'の実装の中には安全な配列があり、[' SafeArrayLock'](https://msdn.microsoft.com/en-us/library/windows/desktop/ms221492(v = vs.85) ).aspx)が['SafeArrayUnlock'](https://msdn.microsoft.com/en-us/library/windows/desktop/ms221246(v = vs.85).aspx)の呼び出しを超えています) – Richard