我在 C# VS11 Beta 中有一个应用程序。
下面的代码抛出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); });
所有对象都在方法中声明和处理,因此每个线程都有自己的实例。
我对为什么这会引发异常感到有些困惑。