从WPF表单调用函数会导致System.ArgumentException
我遇到了一个让我非常困惑的问题,我有一个函数可以在Civil 3D中创建一个配置文件,该配置文件具有许多预期传递给它的参数。出于测试目的,该函数中还编写了代码,以使用与这些参数相同的对象创建新变量,并调用 C3D 函数以创建配置文件。我还有2个命令,一个命令使用空对象直接调用函数(因为我只希望它使用这些命令在函数中进行测试),另一个命令打开一个WPF表单,其中包含要选择的对象,然后将其传递给函数。当我使用测试命令时,配置文件按预期创建。当我将命令与表单一起使用时,即使我仅使用函数的测试部分,它也会在System.ArgumentException中出错,该部分不使用任何传递的参数。那么,是什么可能导致 WPF 表单对此函数造成严重破坏呢?以下是代码的片段: PromptEntityOptions opt = new PromptEntityOptions(“\nSelect an Alignment”);。选择,SetRejectMessage(“\nObject must be an alignment.\n”);。
选择,AddAllowedClass(typeof(Alignment), true);。
ObjectId testAlignID = ed.GetEntity(opt).对象 Id;。
对齐 o 对齐 = 反义,GetObject(testAlignID, OpenMode.ForRead) as Alignment;。
ObjectId testLayerID = oAlignment.LayerId;。
ObjectId testSurfaceId = doc.GetSurfaceIds();。
ObjectId testStyleId = doc.Styles.ProfileStyles;。
ObjectId testLabelSetId = doc.Styles.LabelSetStyles.ProfileLabelSetStyles;。
--------------------------------------------------------------------------------------------------。
尝试。
{。
当直接从命令调用函数时,下一行工作,从 WPF 窗口调用时失败。。
ObjectId otherprofileId = Profile.CreateFromSurface(“Other Profile”, testAlignID, testSurfaceId, testLayerID, testStyleId, testLabelSetId);。
。
**** Hidden Message ***** 当然,我几乎在发布此内容后立即发现了解决方案。一旦我添加了以下内容,它就会正常工作。 using (DocumentLock dl = doc.LockDocument())。
{。
...在此处创建配置文件的代码。
}。
。
我打算提出这个解决方案。 顺便说一句,这不是WPF表格。这是一扇WPF窗。我知道语义学,但在WPF身上使用“形式”这个词让我起鸡皮疙瘩。:
哈哈哈....很高兴我不是唯一一个遇到这种事的人! 我只是将它添加到一个长期运行的项目中。:/长期运行...它是git commit # 1.343。异常处理使它保持活力。很高兴我记录了所有的异常情况
您并不孤单。 Document.DocumentLock()返回一个DocumentLock实例,它只提供了一个Dispose()方法。所以,当在使用语句中调用时,将DocumentLock()的返回值存储在变量中对我来说似乎是绝对无用的。在我身边,我使用:使用(doc.LockDocument())。
{。
...这里的代码。
}。
页:
[1]