2016-09-20 1 views
-1

양식의 나머지 부분을 응답하지 않고 실시간으로 계속 새로 고치기를 원하는 양식의 GUI 요소가 있습니다.커서 아이콘이 자동으로 변경되는 것을 피하는 방법은 무엇입니까?

폼의 생성자로 시작하는 Thread에 refresh 메서드를 할당했습니다.

단점은 마우스 포인터의 아이콘이 '기본값'과 'AppStarting'아이콘 사이에서 자동으로 변경된다는 것입니다.

그래서, 새로 고침이 수행 될 때마다 마우스 포인터의 아이콘이 자동으로 변경되지 않고 '기본'아이콘으로 유지되도록 할 수있는 방법이 있습니까?

업데이트 : 추가 된 revelent 코드 : 호출되는

방법 :

private void WebRefresh() 
    { 
     try 
     { 
      for (int i = 0; i < i + 1; i++) 
      { 
       System.Threading.Thread.Sleep(100); 
       htmlCode = textBox1.Text; 
       File.WriteAllText(@"E:\New folder\Private\My Programs\Html Helper\Data\workingPage.html", textBox1.Text, Encoding.UTF8); 
       webBrowser1.Navigate(@"E:\New folder\Private\My Programs\Html Helper\Data\workingPage.html"); 
      } 
     } 
     catch (IOException ex) 
     { 
      System.Media.SystemSounds.Hand.Play(); 
      MessageBox.Show(ex.Message,ex.TargetSite.ToString()); 
     } 
    } 

스레드 초기화 :

Thread WebPreview = new Thread(WebRefresh); 
WebPreview.Start(); 
+0

GUI 요소를 작성한 스레드 이외의 스레드에서 GUI 요소를 수정할 수 없습니다. – adv12

+2

다른 스레드에서 어떤 종류의 데이터 처리를 할 수 있지만 해당 스레드에서 업데이트하려면 기본 GUI 스레드에있는 함수를 호출해야합니다. 처리를하고 있다면 별도로 처리하길 원하지만 미친 GUI 작업을하는 경우 비효율적 인 코드가있을 수 있습니다. –

+0

관련 코드를 보여주세요! – TaW

답변

0

너무 때문에 내가 대답으로이 쓰고 있어요 오랫동안 댓글을 달았습니다. GUI 컨트롤을 작성한 스레드가 아닌 다른 스레드에서 액세스하거나 수정하는 것은 불법입니다. 당신이 지금이 그래서,이 세 가지 라인 : 그들 각각은 GUI 컨트롤에 액세스하기 때문에

htmlCode = textBox1.Text; 
File.WriteAllText(@"E:\New folder\Private\My Programs\Html Helper\Data\workingPage.html", textBox1.Text, Encoding.UTF8); 
webBrowser1.Navigate(@"E:\New folder\Private\My Programs\Html Helper\Data\workingPage.html"); 

, Control.Invoke를 호출 (이 윈폼입니다 가정)에 의해 GUI 스레드에서 실행해야합니다 (textBox1.Text, textBox1.Text , 및 webBrowser1.Navigate). GUI 스레드가 속한 GUI 스레드에 다시 넣으면 배경 스레드에 남아있는 것이 없으므로 제거 할 수 있습니다.

textBox1.Text 변경 될 때마다 webBrowser1 번만 업데이트하려고하는 것 같습니다. 이를 수행하는 더 좋은 방법은 textBox1.TextChanged에 이벤트 처리기를 연결하는 것입니다. 해당 처리기에서 즉시 텍스트 파일을 작성하고 웹 페이지를 다시로드하거나 ... Tick 이벤트가 발생하고 자체를 사용할 수 없게되면 업데이트를 수행하는 작은 간격으로 타이머를 시작/다시 시작할 수 있습니다. 이러한 설정을 사용하면 텍스트 입력이 잠시 동안 유휴 상태가되었을 때 새로 고침만으로 새로 고침 횟수를 줄일 수 있습니다.

이러한 변경을 수행하고 커서에 여전히 문제가 있는지 확인하십시오. 그렇다면 SO로 돌아가서 새로운 시나리오에 대한 새로운 질문을 만드십시오.

관련 문제