Использую WebClient в Xamarin.iOS. Надо постоянно подгружать файл по ссылке и передавать скачанное в TextField, все отлично получилось. Однако при отключении сети иногда вылетает System.Reflection.TargetInvocationException(хотя я и отлавливаю его) и вылетает именно во время работы, не в начале. Оно вылетает по непонятной мне логике "раз через раз", назовем это так. Код дебажил, понял ГДЕ проблема, но не понимаю В ЧЕМ она заключается и КАК ее исправить.
1. Отключаю сеть wi-fi на телефоне. Программа сразу обращается к этому действию
CrossConnectivity.Current.ConnectivityChanged += (sender, args) =>
{
try
{
if (CrossConnectivity.Current.IsConnected)
{
timer.Elapsed += Timer_Elapsed;
timer.Start();
alertnetworkerror.DismissViewController(true,null);
}
else
{
timer.Stop();
throw new Exception();
}
}
catch (Exception)
{
ShowViewController(alertnetworkerror, null);
ContainerTextPrice1.Text = "";
ContainerTextPrice2.Text = "";
}
};
2. Внутри вызывается метод: timer.Elapsed += Timer_Elapsed И ВОТ КАК РАЗ ТУТ "раз через раз" выкидывается необработанный эксепшн, приложение просто падает
private void Timer_Elapsed(object sender, ElapsedEventArgs e)
{
DateTime myDate = DateTime.Now;
InvokeOnMainThread(() =>
{
var webClient = new WebClient();
var url = new Uri("https://blockchain.info/tobtc?currency=USD&value=1");
webClient.Encoding = Encoding.UTF8;
webClient.DownloadStringCompleted += (s, es) =>
{
var text = es.Result; // get the downloaded text
string documentsPath = Environment.GetFolderPath(Environment.SpecialFolder.Personal);
string localFilename = "downloaded.txt";
string localPath = Path.Combine(documentsPath, localFilename);
File.WriteAllText(localPath, text); // writes to local storage
Decimal.TryParse(text, NumberStyles.Any, CultureInfo.InvariantCulture, out decimal x);
InvokeOnMainThread(() =>
{
ContainerTextPrice2.Text = text;
ContainerTextPrice1.Text = (1 / x).ToString("#.##");
});
};
webClient.DownloadStringAsync(url);
});
}
Заранее спасибо!