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() メソッドを呼び出すと、これらの dataList と points リストが空になるのはなぜですか。そして、それを回避する方法は?

4

4 に答える 4

2

AutoCADのプログラミングについてはわかりませんが、毎回新しいインスタンスが作成されているのではないかと思います。変数を静的(クラスレベルなど)にしてみてください。

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

メソッドを呼び出すたびに新しいクラスをインスタンス化しますか?(許してください。AutoCADのコーディングに慣れていません。)クラスを静的にしてみてください。それが機能しない場合は、最初のメソッドからAutoCADに値を返し、それらを引数として次のメソッドに送信することができますか?これはパフォーマンスにとって最善の解決策ではないことを覚えておいてください。

また、参考のために、C#でのシングルトン実装を見てください。

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

クラスの新しいインスタンスを呼び出しているようです。シングルトンパターンを実装して、常に同じインスタンスを呼び出すようにするか、ポイントを永続化して2回目にロードすることができます。

これは、c#でのシングルトン実装の適切なリンクです。http://csharpindepth.com/Articles/General/Singleton.aspx

于 2010-07-19T12:51:19.943 に答える