Недействительное исключение операции в Windows.
У меня есть приложение, которое делает снимок карты.
когда я собираюсь загрузить изображения я получаю недопустимое исключение операции
Что я уже пробовал:
private bool GetRequestsAndDownload() { coordinatesConverter = new CoordinatesConverter(); decimal dcLength = 0; decimal dcWidth = 0; string strTopLeft = string.Empty; string strBottomRight = string.Empty; string strX1 = string.Empty; string strY1 = string.Empty; string strX2 = string.Empty; string strY2 = string.Empty; double dblTotalWidth = 0; double dblTotalLength = 0; double dblOverlapRatio = 1; try { DataTable dtRequests = new DataTable(); if (!mapNRPSinarpimGoogleMapDownloader.ReqListInfo_DownloadRequestScales(dtRequests)) { mapNRPSinarpimGoogleMapDownloader.RegisterErrorLog("Error in private void GetRequestsAndDownload() IN ReqListInfo_DownloadRequestScales , Description: " + mapNRPSinarpimGoogleMapDownloader.ErrMessage); return false; } foreach (DataRow drRequest in dtRequests.Rows) { strTopLeft = coordinatesConverter.ConvertGeoToLambert(drRequest["X_Top"].ToString(), drRequest["Y_Left"].ToString()); strBottomRight = coordinatesConverter.ConvertGeoToLambert(drRequest["X_Bottom"].ToString(), drRequest["Y_Right"].ToString()); strX1 = strTopLeft.Split('^')[0]; strY1 = strTopLeft.Split('^')[1]; strX2 = strBottomRight.Split('^')[0]; strY2 = strBottomRight.Split('^')[1]; dblTotalLength = double.Parse(strX2) - double.Parse(strX1); dblTotalWidth = double.Parse(strY1) - double.Parse(strY2); switch (drRequest["Zoom"].ToString()) { case "4": dcLength = int.Parse(Math.Floor(7725587.947 * dblOverlapRatio).ToString()); dcWidth = int.Parse(Math.Floor(6234225.796d * dblOverlapRatio).ToString()); break; case "5": dcLength = int.Parse(Math.Floor(4015073.66 * dblOverlapRatio).ToString()); dcWidth = int.Parse(Math.Floor(4089905.38 * dblOverlapRatio).ToString()); break; case "6": dcLength = int.Parse(Math.Floor(1974448.305 * dblOverlapRatio).ToString()); dcWidth = int.Parse(Math.Floor(2077535.6 * dblOverlapRatio).ToString()); break; case "7": dcLength = int.Parse(Math.Floor(993268.35 * dblOverlapRatio).ToString()); dcWidth = int.Parse(Math.Floor(1033088.65 * dblOverlapRatio).ToString()); break; case "8": dcLength = int.Parse(Math.Floor(495397.724 * dblOverlapRatio).ToString()); dcWidth = int.Parse(Math.Floor(517838.934 * dblOverlapRatio).ToString()); break; case "9": dcLength = int.Parse(Math.Floor(248062.84 * dblOverlapRatio).ToString()); dcWidth = int.Parse(Math.Floor(258524.517 * dblOverlapRatio).ToString()); break; case "10": dcLength = int.Parse(Math.Floor(123788.82 * dblOverlapRatio).ToString()); dcWidth = int.Parse(Math.Floor(129494.81 * dblOverlapRatio).ToString()); break; case "11": dcLength = int.Parse(Math.Floor(61819.8 * dblOverlapRatio).ToString()); dcWidth = int.Parse(Math.Floor(64818.66 * dblOverlapRatio).ToString()); break; case "12": dcLength = int.Parse(Math.Floor(30960.08 * dblOverlapRatio).ToString()); dcWidth = int.Parse(Math.Floor(32361.398 * dblOverlapRatio).ToString()); break; case "14": dcLength = int.Parse(Math.Floor(15479.217 * dblOverlapRatio).ToString()); dcWidth = int.Parse(Math.Floor(16181.49 * dblOverlapRatio).ToString()); break; case "15": dcLength = int.Parse(Math.Floor(7758.55 * dblOverlapRatio).ToString()); dcWidth = int.Parse(Math.Floor(8072.57 * dblOverlapRatio).ToString()); break; case "16": dcLength = int.Parse(Math.Floor(3866.77 * dblOverlapRatio).ToString()); dcWidth = int.Parse(Math.Floor(4048.26 * dblOverlapRatio).ToString()); //dcLength = int.Parse(Math.Floor(1500 * dblOverlapRatio).ToString()); //dcWidth = int.Parse(Math.Floor(1500 * dblOverlapRatio).ToString()); break; case "17": dcLength = int.Parse(Math.Floor(1932.17 * dblOverlapRatio).ToString()); dcWidth = int.Parse(Math.Floor(2025.28 * dblOverlapRatio).ToString()); break; case "18": dcLength = int.Parse(Math.Floor(971.93 * dblOverlapRatio).ToString()); dcWidth = int.Parse(Math.Floor(1007.03 * dblOverlapRatio).ToString()); break; case "19": dcLength = int.Parse(Math.Floor(484.21 * dblOverlapRatio).ToString()); dcWidth = int.Parse(Math.Floor(505.2 * dblOverlapRatio).ToString()); break; case "20": dcLength = int.Parse(Math.Floor(241.63 * dblOverlapRatio).ToString()); dcWidth = int.Parse(Math.Floor(253.05 * dblOverlapRatio).ToString()); break; case "21": dcLength = int.Parse(Math.Floor(121.02 * dblOverlapRatio).ToString()); dcWidth = int.Parse(Math.Floor(126.33 * dblOverlapRatio).ToString()); break; case "22": dcLength = int.Parse(Math.Floor(60.49 * dblOverlapRatio).ToString()); dcWidth = int.Parse(Math.Floor(63.18 * dblOverlapRatio).ToString()); break; default: //err log break; } int intTotalI = int.Parse(Math.Floor(dblTotalLength / double.Parse(dcLength.ToString())).ToString()); int intTotalJ = Math.Abs(int.Parse(Math.Floor(dblTotalWidth / double.Parse(dcWidth.ToString())).ToString())); decimal dcBase_X = decimal.Parse(strX1); decimal dcBase_Y = decimal.Parse(strY1); decimal dcX1 = decimal.Parse(strX1); decimal dcX2 = decimal.Parse(strX2); decimal dcY1 = decimal.Parse(strY1); decimal dcY2 = decimal.Parse(strY2); decimal dcXCenter = 0; decimal dcYCenter = 0; string strCenterPoint = string.Empty; for (int j = 0; j < intTotalJ; j++) { dcX1 = dcBase_X; dcY1 = dcBase_Y; decimal dcFactor = (decimal)0.1; for (int i = 0; i < intTotalI; i++) { //dcX1 = dcX1 + (i * dcWidth); ////dcX1 = (dcX1 - (int)(dcWidth * dcFactor)) + (i * (dcWidth * ((decimal)1.2))); //dcX2 = dcX1 + dcWidth; ////dcX2 = dcX1 + (dcWidth * ((decimal)1.2)); //dcY1 = dcY1 - (j * dcLength); //dcY2 = dcY1 - dcLength; dcX1 = dcBase_X + (i * dcWidth); dcX2 = dcX1 + dcWidth; dcY1 = dcBase_Y - (j * dcLength); dcY2 = dcY1 - dcLength; dcXCenter = (dcX1 + dcX2) / 2; dcYCenter = (dcY1 + dcY2) / 2; strCenterPoint = coordinatesConverter.LambertToGeo(double.Parse(dcXCenter.ToString()), double.Parse(dcYCenter.ToString())); new Thread(delegate() { CallShowMap(MapType.MapTypeHybridSatellite, Convert.ToDouble(strCenterPoint.Split('^')[0]), Convert.ToDouble(strCenterPoint.Split('^')[1]), Convert.ToDouble(drRequest["Zoom"].ToString()), i, j); //CallShowMap(MapType.MapTypeHybridSatellite, Convert.ToDouble(strCenterPoint.Split('^')[1]), Convert.ToDouble(strCenterPoint.Split('^')[0]), Convert.ToDouble(drRequest["Zoom"].ToString()), i, j); }).Start(); //SendOrPostCallback invoker = new SendOrPostCallback( // delegate(object data) // { // CallShowMap(MapType.MapTypeHybridSatellite, Convert.ToDouble(strCenterPoint.Split('^')[0]), Convert.ToDouble(strCenterPoint.Split('^')[1]), Convert.ToDouble(drRequest["Zoom"].ToString()), i, j); // }); //MethodInvoker mi = delegate //{ // CallShowMap(MapType.MapTypeHybridSatellite, Convert.ToDouble(strCenterPoint.Split('^')[0]), Convert.ToDouble(strCenterPoint.Split('^')[1]), Convert.ToDouble(drRequest["Zoom"].ToString()), i, j); //}; } } // return true; //double Xc = (double.Parse(x1) + double.Parse(x2)) / 2; //double Yc = (double.Parse(y1) + double.Parse(y2)) / 2; //coordinatesConverter.LambertToGeo(double.Parse(x1), double.Parse(y1)); //coordinatesConverter.LambertToGeo(double.Parse(x2), double.Parse(y2)); } } catch (Exception) { return false; } return true; }
public void ControlThreadProc() { while (m_bRunning == true) { // Check threads execution bool bRestart_0 = false; bool bRestart_1 = false; bool bRestart_2 = false; bool bRestart_3 = false; bool bDownloadFinished = true; foreach (DownloadInfo di in m_DownloadQue) { if (di.bComplete == false) { bDownloadFinished = false; TimeSpan ts = DateTime.Now.Subtract(di.time); if (ts.Seconds > 10) { if (di.serverId == 0) { bRestart_0 = true; } if (di.serverId == 1) { bRestart_1 = true; } if (di.serverId == 2) { bRestart_2 = true; } if (di.serverId == 3) { bRestart_3 = true; } } } }
Eric Lynch
Слишком много кода, чтобы просеять его...шаг за шагом через отладчик...найдите строку, в которой выбрасывается исключение, и выделите ее. Кроме того, если вы можете, включите трассировку стека (исключение.ToString()) для исключения. Иногда есть внутренние исключения, которые обеспечивают дополнительную детализацию.
Richard MacCutchan
int intTotalI = int.Parse(Math.Floor(dblTotalLength / double.Parse(dcLength.ToString())).ToString());
С какой стати вы преобразуете значения в строки, просто чтобы вы могли разобрать их обратно к их первоначальным значениям? Просто используйте простую математику:int intTotalI = int(Math.Floor(dblTotalLength / dcLength));