C# VS11 ベータ版のアプリケーションがあります。
以下のコードはスローしますNullReferenceException
(コメント行)
private void ParralelProcessor(Int32 threadNum)
{
HashSet<Feature> Features = new HashSet<Feature>();
HashSet<FeatureType> FeatureTypes = new HashSet<FeatureType>();
DataTable TopographicFeatures = new DataTable();
DataTable TopographicFeatureObjects = new DataTable();
DataTable CartographicText = new DataTable();
DataTable CartographicSymbol = new DataTable();
List<DataRow> FeaturesAsRows = new List<DataRow>();
List<DataRow> FeatureObjectsAsRows = new List<DataRow>();
List<DataRow> CartographicTextAsRows = new List<DataRow>();
List<DataRow> CartographicSymbolAsRows = new List<DataRow>();
Thread.Sleep(100);
TopographicFeatures.Columns.Add("fid", typeof(System.Int64));
TopographicFeatures.Columns.Add("FeatureId", typeof(System.Int16));
TopographicFeatureObjects.Columns.Add("fid", typeof(System.Int64));
//BELOW
TopographicFeatureObjects.Columns.Add("GeoCoordinates", typeof(SqlGeometry)); //THIS LINE
//ABOVE
TopographicFeatureObjects.Columns.Add("TypeId", typeof(System.Int16));
CartographicText.Columns.Add("fid", typeof(System.Int64));
CartographicText.Columns.Add("textString", typeof(System.String));
CartographicText.Columns.Add("anchorPosition", typeof(System.Int16));
CartographicText.Columns.Add("font", typeof(System.Int16));
CartographicText.Columns.Add("height", typeof(System.Decimal));
CartographicText.Columns.Add("orientation", typeof(System.Decimal));
CartographicSymbol.Columns.Add("fid", typeof(System.Int64));
CartographicSymbol.Columns.Add("orientation", typeof(System.Decimal));
デバッグ情報は、表null
も列コレクションもそうではないことを示しています。
Parralel.For
以下のようにループで呼び出されるメソッド内で実行されます
Parallel.For(1, ThreadsPerFile + 1, X => { ParralelProcessor(X); });
すべてのオブジェクトはメソッドで宣言および破棄されるため、各スレッドには独自のインスタンスがあります。
なぜこれが例外をスローするのか、私は少し困惑しています。