C\#-WinForm 크로스 스 레 드 수정 UI 인터페이스의 예제

배경
제 가 WinForm 개발 을 하 는 과정 에서 시간 이 걸 리 거나 조작 을 막 는 경우 가 많 습 니 다.그들 은 소프트웨어 의 카드 가 걸 리 거나 가사 까지 일 으 켜 소프트웨어 의 사용 에 심각 한 영향 을 줄 수 있다.따라서 이러한 시간 이 걸 리 거나 막 힌 작업 은 보통 비동기 방식 으로 실행 되 며 메 인 스 레 드(UI 스 레 드)와 사용자 간 의 상호작용 에 영향 을 주지 않 습 니 다.그러나 여러 개의 스 레 드 경쟁 에서 같은 자원 을 읽 고 쓰 는 것 은 예상 치 못 한 의외 의 결 과 를 초래 할 수 있 고 UI 인터페이스 도 자원 이기 때문에 크로스 스 레 드 수정 UI 인터페이스 는 제한 을 받는다.Winform 에서 크로스 스 레 드 수정 UI 인터페이스 역시 허용 되 지 않 습 니 다.하위 스 레 드 에서 인터페이스 컨트롤 을 수정 할 때 Visual Studio 는 다음 과 같은 오 류 를 보고 합 니 다.

해결 방향
.Net 은 여러 가지 크로스 스 레 드 에서 UI 를 수정 하 는 방법 을 제공 하고 모든 방법 에 해당 하 는 도구 류 도 있 습 니 다.제 가 가장 자주 사용 하 는 방법 은 Threadpool+delegate 방식 으로 크로스 스 레 드 가 UI 에 대한 수정 을 완성 하 는 것 입 니 다.
인 스 턴 스 코드
1.의뢰 를 정의 하고 내용 을 컨트롤 에 적 습 니 다.

private delegate void SetLabelDelegate(string value);

    private delegate void SetLabelDelegate2(string value);

    private void SetText(string value)
    {
      if (this.InvokeRequired)
      {
        SetLabelDelegate d = new SetLabelDelegate(SetText);
        this.Invoke(d, new object[] { value });
      }
      else
      {
        txtbigcrmresult.Text = value.ToString() + txtbigcrmresult.Text;
      }
    }
2.정의 방법,스 레 드 호출

private void button3_Click(object sender, EventArgs e)
    {
      ThreadPool.QueueUserWorkItem(new WaitCallback(dao), "test");
    }
 private void dao(object url)
    {
      IDbConnection conn = new SqlConnection(txtbigcrmui.Text);
      SetText("\r
" + "start"); ......................... SetText("\r
" + "end"); }
3.ui 컨트롤 업데이트

 SetText("\r
" + "start");
총결산
1.delegate 를 사용 하여 크로스 스 레 드 업데이트 UI 를 실현 합 니 다.
2.ThreadPool 을 사용 하여 다 중 스 레 드 실행 방법 을 실현 하고 끊 기지 않도록 합 니 다.
이상 은 C\#-WinForm 크로스 스 레 드 수정 UI 인터페이스의 예제 에 대한 상세 한 내용 입 니 다.C\#-WinForm 크로스 스 레 드 에 관 한 자 료 는 저희 의 다른 관련 글 을 주목 하 세 요!

좋은 웹페이지 즐겨찾기