2017-04-27 4 views
-1

지난 번 질문과 비슷한 질문이 있지만 벽에 얼마나 많은 충격을 받았는지에 대한 해결책은 나오지 않습니다. 문제는 메시지 상자가 한 번만 열리 며 documentCompleted에서 탈퇴 한 다음 종료해야하는 메시지 상자가 너무 많이 생성된다는 것입니다. 다시 한 번 감사드립니다!{다시} C# MessageBox가 두 번 이상 생성되었습니다.

private void textBox4_TextChanged(object sender, EventArgs e) 
{ 
    if (textBox4.Text.Length >= 3) 
    { 
     timer1.Enabled = true; 
    } 
} 

private void timer1_Tick_1(object sender, EventArgs e) 
{ 
    if (textBox4.Text != "") 
    { 
     webBrowser1.ScriptErrorsSuppressed = true; 
     webBrowser1.Navigate("https://worldofwarcraft.com/en-gb/search?q=" + textBox4.Text); 

     webBrowser1.DocumentCompleted += GetImg; //sub here 
    } 
} 

private void GetImg(object sender, WebBrowserDocumentCompletedEventArgs e) 
{ 
    string img_url = ""; 
    foreach (HtmlElement el in webBrowser1.Document.GetElementsByTagName("div")) 
    { 
     if (el.GetAttribute("className") == "Avatar-image") 
     { 
      img_url = (el.OuterHtml).Substring(el.OuterHtml.IndexOf("https")); 
      img_url = img_url.Substring(0, img_url.IndexOf(")")); 
      pictureBox1.ImageLocation = img_url; 
     } 
     else if (el.GetAttribute("className") == "Character-level") 
     { 
      textBox5.Visible = true; 
      label7.Visible = true; 
      string lvl_url = ""; 
      lvl_url = (el.InnerHtml).Substring(3); 
      lvl_url = lvl_url.Substring(0, lvl_url.IndexOf("<")); 
      textBox5.Text = lvl_url; 
      DialogResult YESNO = MessageBox.Show("Is this your character?", "Select your char", MessageBoxButtons.YesNo, MessageBoxIcon.Question); 
      if (YESNO == DialogResult.Yes) 
      { 
       // clean up 
       webBrowser1.DocumentCompleted -= GetImg; //unsub here 
       pictureBox1.Enabled = false; 
       timer1.Dispose(); 
       break; 
      } 
     } 

    } 
} 

답변

4

당신이 중 하나를 설정하면 timer1_Tick_1 방법을 입력하거나 타이머가 발사과 방법을마다 호출을 유지한다 마자) false로 timer1.Enabled 또는 timer1.Stop을 (호출해야합니다.

+0

당신은 내 친구 천재입니다 :). 왜 이런 일이 일어나고 있는지 설명하기 위해 신경 써야합니까? – Nanyo

+0

물론, 기본적으로 Start() 또는 Enable timer (타이머 활성화)를 선택하면 타이머가 중지 될 때까지 타이머가 계속 실행됩니다. GetImg 메서드에서 "Dispose"를 사용하고 있지만 GetImg 메서드는 DocumentCompleted에서만 호출되며 (다운로드를 시작한 후 많은 시간이 걸릴 수 있음) 타이머가 여러 번 실행될 수 있습니다. timer1_Tick_1 메소드를 여러 번 반복). 그게 도움이 되었습니까? –

+0

나는 고맙습니다, 해결 된 것으로 표시됨 :) – Nanyo