재귀 함수가 있으며 시간, 시도 횟수 및 재귀 함수의 현재 시도를 사용하여 양식을 업데이트하려고합니다. 초마다 양식이 업데이트되어야합니다. 현재 methodinvoker가 작동하지 않습니다. 컴파일러는 줄을 강조 표시하지만 계속하지 않고 다시 나타납니다.타이머 업데이트 관련 문제 양식
나는 이미 별도의 스레드에 함수를 배치하려고했지만 성능이 좋지 않으므로 기본 스레드에서 함수를 유지하는 것이 좋습니다.
아이디어가 있으십니까?
void bruteForce_DoWork()
{
doBruteForceEID("", 0, wordlen, temp);
}
void _myTimer_Elapsed(object sender, ElapsedEventArgs e)
{
if (InvokeRequired)
{
runTimeSec++;
this.Invoke(new MethodInvoker(delegate() { this.toolStrip.Text = "Running... " + runTimeSec + "s"; }));
Invoke(new MethodInvoker(delegate() { lblAttackA.Text = Convert.ToString(attackCount); }));
Invoke(new MethodInvoker(delegate { lblCurAttempt.Text = brute; }));
}
else
{
runTimeSec++;
toolStrip.Text = "Running... " + runTimeSec + "s";
lblAttackA.Text = Convert.ToString(attackCount);
lblCurAttempt.Text = brute;
}
}
편집 : 나 프로그램 alitte을 설명하게 더 ... 사용자가 확인하고 싶은 것을 자신의 암호를 입력하면 그들이 계산에 충돌 한 후, 다음이 발생합니다. - 더미 재귀 알고리즘을 실행하여 5 초 이내에 머신이 수행 할 수있는 사이클 수를 확인한 다음 평균하여 얼마나 많은 사이클을 초당 할 수 있는지 더 잘 알 수 있습니다. 5 초 타이머가되면
back = new Thread(new ThreadStart(testLoop_DoWork)); // Calls the dummy algorithm
back.Start();
if (rbtnTest.Checked)
{
txtEID.Text = txtUID.Text;
lblRunCycle.Text = "Calculating...";
testTimer.Enabled = true; // Starts the Timer
}
, 나는 길이, 초당 사이클, 어떤 문자 (대문자, 소문자, 숫자, 기호), 그것은 걸리는 시간을 제공하는 각각의 문자 배열을 추가를 확인 brute force char 배열을 만든 다음 스레드를 조인()하고 타이머를 비활성화하십시오. 나는 대략 초당 7 백만 회의 사이클을 얻을 것이다. (이 숫자를 기억하라). 또한, 나는이 시간 동안 GUI를 업데이 트하지 않을거야 .. 그냥 만든 스레드를 실행. 사용자가 공격을 실행하고자하는 그런 경우
, 그것을 수행합니다 나는 새 스레드에 실행을 시작하면, 그것은 초당 약 30,000주기를 표시
attackBack = new Thread(new ThreadStart(bruteForce_DoWork));
attackBack.Start();
_myTimer.Enabled = true;
? 내 타이머가 매 초만 업데이트됩니다. 무슨 일 이니?
편집 : 나는 타이머를 주석 처리 했으므로 아무 것도 GUI로 업데이트하지 않습니다. 그리고 같은 결과는 무차별 대입이 발견되었을 때 발생합니다 (예 : 'test'라는 단어가 즉시 있어야 함).하지만 그것을 찾기 위해 10 초가 걸립니다 ...
올바르게 이해한다면 UI 스레드가 계산 집약적 인 작업을 수행하는 중입니다. 어떤 종류의 타이머를 사용합니까, 'System.Threading'또는'System.Windows.Forms'에있는 타이머입니까? 전체 예제를 붙여 넣으시겠습니까? 위의 코드는 나머지 프로그램에 대해 많은 추측을 필요로합니다. –
문제는 아니지만 코드를 복제하지 마십시오. '_myTimer_Elapsed'를'Invoke'에 전달하십시오. –
코드의 첫 번째 부분에서 예, UI가 작업을 수행하고있었습니다.하지만 그것은 집중적 인 작업을 별도의 스레드에 배치 한 후에 발생합니다. 설명과 함께 별도의 스레드에 집중 코드가있는 추가 코드를 게시했습니다. – Questioner