나는 내 IP를 검사하는 간단한 응용 프로그램을 만들었습니다. 아이디어는 : 나는 버튼을 클릭하면내 ip가 이전 제품과 비교하여 고유한지 확인하십시오.
1) 앱이 내 IP를 확인하고 이전 IPS
와 비교합니다2) 나의 새로운 IP가 이전처럼 동일한 경우 수행 아무것도
3) 나의 새로운 IP는 이전과는 다른 내가 unique
을 증가시키고 dataGridRow1
새 행에 추가하기 전에이 IP를 한 적이 없다면
4) 나의 새로운 IP 나의 새로운 IP는 이전과 다른,하지만 증가 duplicate
전에이 IP에 할당 dataGridRow1
새 행
my_ip
5) 경우
6) 모든 dataGrid1
중복 된 IP를 포함하는 BackColor 행은 빨간색입니다.
전역 변수 :
string old_ip = "";
string new_ip = "";
int new_row = 0; //new added row position
int duplicate = 0;
int my_ip = 0;
int unique = 0;
지연 기능
public void MyDelad(int milliseconds)
{
Stopwatch stopwatch = Stopwatch.StartNew();
while (stopwatch.ElapsedMilliseconds <= (long)milliseconds)
{
Application.DoEvents();
}
}
Button_click 이벤트
가 포함되어있는 경우 기본의 코드로 가자는 녹색 컬러확인의 IP
MyDelad(500); while (true) //force obtain new_ip { try { new_ip = new System.Net.WebClient().DownloadString("https://api.ipify.org"); } catch { MyDelad(500); continue; } break; } if (old_ip != new_ip) //compare old and new ip { unique++; dataGridView1.Rows.Add(new_ip); if (new_ip == "121.464.544.122") //if new ip is my default { my_ip++; unique--; //if it's default ip instead of unique dataGridView1.Rows[new_row].Cells[0].Style.BackColor = System.Drawing.Color.Green; } else //check every row if ip existed before { for (int x = 0; x < dataGridView1.Rows.Count - 2; x++) //check from first to penultimate row { if (dataGridView1.Rows[x].Cells[0].Value.ToString() == new_ip.ToString()) { duplicate++; } } } new_row++; //increment new added row position } old_ip = new_ip; }
내 첫 번째 질문 : 전역 변수를 사용하는 것이 잘못되었다고 들었습니다. 그러나 button_click
이벤트에서 로컬 변수를 사용하면 모든 버튼을 클릭 한 후에 변수 값이 재설정됩니다 (예 : unique
값을 저장하는 변수). 그럼 전역 변수를 사용해야합니까?
두 번째 질문 : 다른 방법으로 unique
값을 저장할 수 있습니까? 지금은 값이 old_ip != new_ip
인 경우 증가합니다. 그리고 거기에 new_ip == '121.464.544.122'
이면, 내 기본값이기 때문에 unique
값을 뺍니다.
세 번째 질문 :Button_Click
이벤트를 실행할 때 응용 프로그램이 "동결"되지 않도록하려면 어떻게해야합니까?.
네 번째 질문 : 내 코드를 개선하는 방법에 대한 아이디어가 있습니까? 아마 이전 ip를 텍스트 파일이나 배열에 저장하는 것이 더 낫겠습니까?