Catch ArgumentOutOfRangeException

时间:2016-03-04 01:01:16

标签: c#

我有一个定时器每秒运行一次的功能。该函数的目的是通过API请求数据,然后使用结果更新列表和一些文本框。在大多数情况下,它像发条一样运行,但每隔几个小时我就会得到一个ArgumentOutOfRangeException。

无论出于何种原因,要么一个API请求失败,要么列表的更新速度不够快。无论哪种方式,该函数都尝试使用空列表更新texbox和变量,因此ArgumentOutOfRangeException。

现在这个数据大部分都没有存储任何时间长度,如果没有弹出错误并停止一切,该函数将在另一秒内再次运行。在我制作这个程序之前我没有使用过C#所以我不确定如何最好地利用“catch”语句让程序忽略它并继续前进。实际上,如果在整数变量中记录失败次数会很好,这样程序就可以确定某些事情是否真的错了,而不仅仅是一时的故障。你会如何写这个catch语句?

        try
        { 
            GetQuoteResponse resp = GetQuoteResponse.GetQuote(questradeToken, quotesSymbolIds);
            List<Level1DataItem> quotes = resp.Quotes;

            QuoteStream_Data.Clear();
            for (int i = 0; i < quotes.Count; ++i)
            {
                Level1DataItem quote = quotes[i];
                QuoteStream_Data.Add(new QuoteStream_Entry { lastTradePrice = Convert.ToDecimal(quote.m_lastTradePrice)});
            }

            XIVPriceBox.Invoke(new Action(() => XIVPriceBox.Text = QuoteStream_Data[0].lastTradePrice.ToString()));
            HVIPriceBox.Invoke(new Action(() => HVIPriceBox.Text = QuoteStream_Data[1].lastTradePrice.ToString()));
            TVIXPriceBox.Invoke(new Action(() => TVIXPriceBox.Text = QuoteStream_Data[2].lastTradePrice.ToString()));

            XIVCurrentPrice = QuoteStream_Data[0].lastTradePrice;
            TVIXCurrentPrice = QuoteStream_Data[2].lastTradePrice;
        }
        catch
        {

        }

1 个答案:

答案 0 :(得分:1)

 try
 {
    // ...
 } 
 catch(ArgumentOutOfRangeException ex)
 {
    LogException(ex);
 }