Exception 堆栈溢出异常
我使用DDE客户端来连接和收听股票市场价格。那个客户机有一个回调方法,我实现了当它收到价格变化时该做什么。问题是我周期性地得到StackOverflowException,而不是在同一时间间隔。我找到了一些关于Thread.BeginCriticalRegion的信息,但我不确定它是否有用。我还有几个小时可以测试市场开盘前的情况。 如果有人能告诉我如何覆盖这个异常,我将不胜感激 提前感谢,, 亚历山大 IList_符号//应用程序首次运行时初始化 StackOverflowException是由于对许多方法进行调用而引起的,这些调用通常是由意外递归引起的。根据对你发布的代码的粗略检查,我不认为这是罪魁祸首。问题可能出在其他地方Exception 堆栈溢出异常,exception,stack-overflow,dde,Exception,Stack Overflow,Dde,我使用DDE客户端来连接和收听股票市场价格。那个客户机有一个回调方法,我实现了当它收到价格变化时该做什么。问题是我周期性地得到StackOverflowException,而不是在同一时间间隔。我找到了一些关于Thread.BeginCriticalRegion的信息,但我不确定它是否有用。我还有几个小时可以测试市场开盘前的情况。 如果有人能告诉我如何覆盖这个异常,我将不胜感激 提前感谢,, 亚历山大 IList_符号//应用程序首次运行时初始化 StackOverflowException是由
void _ddeClient_Advise(object sender, DdeAdviseEventArgs args)
{
if (!IsReady)
return;
if (string.IsNullOrEmpty(args.Text))
{
_logMessages.LogMessagesAdd("advise dde symbol", string.Format("args.Text is empty or NULL for {0}", args.Item), true);
return;
}
try
{
string[] argsArray = args.Text.Replace("\0", "").Replace('\0'.ToString(), "").Split(' '); // sometimes happens here
var list = _symbols.Where(s => s.DDESymbol == args.Item).ToList();
if (list.Count == 0)
return;
decimal? val = null;
try
{
var stringParts = StringUtils.CleanProphitXUrl(argsArray[0]).Split('.');
argsArray = null;
if (stringParts.Length >= 2)
val = decimal.Parse(stringParts[0] + "." + (stringParts[1].Length > 2 ? stringParts[1].Substring(0, 2) : stringParts[1]));
else
val = decimal.Parse(stringParts[0]);
stringParts = null;
}
catch (Exception ex)
{
_logMessages.LogMessagesAdd("call Price Alerts application service", ex.Message, true);
return;
}
foreach (var l in list)
{
if (_lastPrices[l.DDESymbol] == null)
continue;
if (_lastPrices[l.DDESymbol].ToString() != val.ToString())
{
try
{
_quotePublishingService.PublishQuote(l.DDESymbolId, l.Symbol, args.Item, val, WebSyncPublisherUrl,
PublishingChannel); // a call to wcf service
}
catch (Exception ex)
{
_logMessages.LogMessagesAdd("call the service", ex.Message, true); // save to sql db
return;
}
_lastPrices[l.DDESymbol] = val.ToString();
}
}
list = null;
val = null;
}
catch
{
}
}
public static string CleanProphitXUrl(string value) // StringUtils.CleanProphitXUrl snippet
{
StringBuilder sb = new StringBuilder();
sb.Append(value.Substring(0, value.LastIndexOf(".") + 1));
try
{
value = value.Replace('\r'.ToString(), "").Replace('\t'.ToString(), "").Replace('\n'.ToString(), "");
for (int i = sb.Length; i < value.Length; i++)
{
if (char.IsNumber(value[i]))
sb.Append(value[i]);
}
}
catch
{
}
return sb.ToString();
}