var arrFiles = oDI.GetFiles("*.dll");
foreach (var fi in arrFiles)
{
var ass = Assembly.LoadFile(fi.FullName);
var arrTypes = ass.GetTypes();
foreach (var type in arrTypes)
{
if (type.BaseType == typeof(DataProvider))
{
object oRet = Activator.CreateInstance(type);
//var oRet = type.InvokeMember("CreateInstance", BindingFlags.InvokeMethod, null, null, null);
if (oRet != null && oRet.GetType().BaseType == typeof(DataProvider))
_vtDataProvider.Add((DataProvider)oRet);
}
}
}
这段代码动态创建了一个外部组件。
然后在普通模式中自动突然退出
在Debug模式中丢出异常System.Reflection.TargetInvocationException
实际上,这个异常的原因是组件的构造函数丢出异常。
组件的相关代码如下:
public QjDataProvider()
{
_UpdateMarket();
}
bool _UpdateMarket()
{
_dtMarket.Clear();
//添加各种市场
_dtMarket.Add(MARKETNAME.SK_SHA, new Market(MARKETNAME.SK_SHA));
_dtMarket.Add(MARKETNAME.SK_SZA, new Market(MARKETNAME.SK_SZA));
//从历史数据中5分钟K线
var oDI = new DirectoryInfo(_strQjDataFolder + @"\history\SHASE\nmn");
var arrFiles = oDI.GetFiles("*.*");
var marketSHA = _dtMarket[MARKETNAME.SK_SHA];
foreach (var oFile in arrFiles)
{
var data = new Variety();
var strId = oFile.Name.Substring(0, oFile.Name.Length - oFile.Extension.Length);
data.VarietyId = System.Convert.ToInt32(strId);
data.VarietyName = strId;
data.eMarketName = MARKETNAME.SK_SHA;
marketSHA.AddVariety(data);
}
return true;
}
var oDI = new DirectoryInfo(_strQjDataFolder + @"\history\SHASE\nmn");
这条语句发生崩溃,造成组件构造崩溃,形成了这个问题!