2

我正在使用 .NET 为 AutoCAD 创建一个类库。

问题是这些方法从 AutoCAD 中依次调用,第一个方法读取输入文件并在内存中创建数据列表。但是,当调用新的列表时,列表为空。

我需要找到一个解决方案如何保留这些数据。该列表包含我创建的结构中的数据。方法是独立调用的,但是是按顺序调用的。

短代码示例:

namespace GeoPjuvis
{
   ...

public class Program
{
    ...

//program variables 
private List<GeoData> dataList;
private List<DataPoint> points;
private int mapScale;

public Program()
{
    dataList = new List<GeoData>();
    points = new List<DataPoint>();
}

//Initialization method of the program. Makes praperations. Reads files. Add points to map.
[CommandMethod("geoinit", CommandFlags.Session)]
public void Init()
{
    ...
}

//method uses data gathered before and selects points  
[CommandMethod("selectPoints", CommandFlags.Session)]
public void SelectPoints()
{

    ...

}...

那么为什么当我调用 SelectPoints() 方法时这些数据列表和点列表是空的。以及如何避免这种情况?

4

4 回答 4

2

我不知道 AutoCAD 的编程,但我怀疑它每次都在创建一个新实例。您可以尝试将变量设为静态(例如类级别):

private static List<GeoData> dataList = new List<GeoData>();
于 2010-07-19T12:53:06.430 回答
0

每次调用方法时都会实例化一个新类吗?(原谅我,我不熟悉 AutoCAD 的编码。)尝试将类设为静态。如果这不起作用,您能否将第一个方法中的值返回给 AutoCAD 并将其作为参数发送给下一个方法?请记住,这不是性能的最佳解决方案。

另外,作为参考,请查看 C# 中的 Singleton 实现:

http://msdn.microsoft.com/en-us/library/ff650316.aspx

于 2010-07-19T12:49:52.957 回答
0

猜测一下,根据您提供的信息,AutoCAD 是否会为每个方法调用创建对象的新实例?这可以解释为什么您的实例变量为空。

尝试将变量设为静态并查看数据是否在方法调用中持续存在。

AutoCAD 文档是否有任何关于编写这些程序的说明?

于 2010-07-19T12:50:34.337 回答
0

看起来你正在调用你的类的一个新实例,你可以实现一个单例模式以确保你总是调用同一个实例或保持点并第二次加载它们。

这是 C# 中单例实现的一个很好的链接,http://csharpindepth.com/Articles/General/Singleton.aspx

于 2010-07-19T12:51:19.943 回答