如何解决错误提示提供商的数据在对象为"已加载"前不能访问?
提示提供商的数据在对象为"已加载"前不能访问,该问题是由于不正当使用组件导致的。EasyLanguage中PriceSeriesProvider、QuotesProvider、FundamentalQuotesProvider等Provider组件均是异步加载的(与堵塞相对),也即执行数据加载过程不会堵塞进程,但是这样的一个问题就是程序往下继续执行时数据有可能还在加载中(也即状态没有变为已加载),解决该问题的方案就是在Provider的状态变化中增加处理数据的逻辑,当数据为已加载之后再去访问数据,而不是执行 Provider.Load = TRUE;之后立即访问数据。
示例1:在QuotesProvider的Updated事件中处理数据,而非Load=TRUE之后
using guosen;
using tsdata.common;
using tsdata.marketdata;
vars:QuotesProvider QP(null);
method void AnalysisTechnique_Initialized( elsystem.Object sender, elsystem.InitializedEventArgs args )
begin
QP = new QuotesProvider;
QP.Load = false;
QP.Symbol = "000001.SZ";//设置股票代码
QP.fields += "highLimit,LowLimit";//属性可增可减,不区分大小写,但需用逗号分隔开来
QP.Updated += QP_Updated; //为QuotesProvider绑定更新事件
QP.Load = true;
end;
Method void QP_Updated(elsystem.Object sender,tsdata.marketdata.QuoteUpdatedEventArgs args)
Begin
if(QP.State=DataState.loaded)then //如果数据状态为已加载
Begin
Print("HighLimit: "+ numtostr(QP.Quote["HighLimit"].Int64Value,0) + //代码名称
" LowLimit:" + numtostr(QP.Quote["HighLimit"].Int64Value,0) //最新价
);
End;
End;
//打印语句输出栏结果示例:HighLimit: 100900 LowLimit:100900