2017-05-22 5 views
0

J'ai développé une application que l'on capture des vitesses de carte réseau, je peux utiliser ci-dessous le code pour obtenir des données:pourquoi mon application wpf obtenir la valeur -2097152 lors de la capture Vitesse de la carte réseau?

NetworkInterface nic = nicArr[0]; 
IPv4InterfaceStatistics interfaceStats = nic.GetIPv4Statistics(); 
Int64 bytesSentSpeed = (Int64)(interfaceStats.BytesSent - uploadSpeed)/1024; 
uploadSpeed = double.Parse(interfaceStats.BytesSent.ToString()); 
Int64 bytesReceivedSpeed = (int)(interfaceStats.BytesReceived - downloadSpeed)/1024; 
downloadSpeed = double.Parse(interfaceStats.BytesReceived.ToString()); 
UpDownSpeed.Add("UpSpeed", bytesSentSpeed.ToString()); 
UpDownSpeed.Add("DownSpeed", bytesReceivedSpeed.ToString()); 

puis-je obtenir la valeur:

UpDpwnSpeed["UpSpeed"].ToString() 

pourquoi j'obtenir un numéro -2097152?

+1

ressemble à une exception de débordement. Mais vous ne montrez pas toute l'image: les définitions de 'uploadSpeed' et' downloadSpeed' sont manquantes, et est-ce dans une boucle while? – kennyzx

+0

Ce n'est pas dans une boucle. C'est un problème d'exception de débordement, changez int pour Int64, je résous ce problème, merci! –

Répondre

0

Il semble que vous avez uploadSpeed et downloadSpeed comme float, pour bytesReceivedSpeed vous rejetterai l'expression de int, donc si vous avez la valeur (interfaceStats.BytesReceived - downloadSpeed) plus que 2.147.483.647 (int.MaxValue), alors vous devenez une valeur négative sur le bas jeté (int).
Faites toutes les opérations comme flottantes et formatez simplement la valeur pour votre dictionnaire.

+0

Merci pour votre aide! Je suis changement int à Int64, alors je résous ce problème. –

+0

@zhangmike Vous êtes les bienvenus! :) – Rekshino