c\#에서 Winform 은 다 중 스 레 드 비동기 업데이트 UI(진도 및 상태 정보)를 실현 합 니 다.

3789 단어 winformc#
머리말
Winform 프로그램 개발 을 진행 하려 면 대량의 데이터 읽 기와 쓰기 작업 을 해 야 할 때 일정한 시간 이 필요 하 다.그러나 이 시간 대 에 인터페이스 ui 가 업 데 이 트 를 받 지 못 해 사용자 가 보기에 인터페이스 가 가사 상태 에 있 고 좋 지 않 은 사용자 체험 을 하 게 된다.그래서 대량의 데이터 조작 응용 에 있어 다 중 스 레 드 를 사용 하여 이런 상황 을 처리 해 야 한다.c\#에서 다 중 스 레 드 를 사용 하 는 것 은 매우 편리 합 니 다.System.Threading.Thread 의 인 스 턴 스 스타트 방법 만 사용 하면 됩 니 다.그러나 다 중 스 레 드 간 의 상호작용 을 어떻게 실현 하 는 지 는 그리 간단 하지 않 습 니 다.본 고 는 하위 스 레 드 로 데 이 터 를 처리 하고 메 인 스 레 드 의 ui 상 태 를 실시 간 으로 업데이트 하 는 것 을 실현 했다.다음은 비동기 스 레 드 업데이트 ui 의 demo 프로그램 을 한 걸음 한 걸음 시작 하 겠 습 니 다.
응용 배경
일 정량의 데 이 터 를 텍스트 파일 에 기록 하 는 동시에 메 인 인터페이스 에서 데 이 터 를 기록 하 는 실시 간 진행 상황 을 반영 해 야 합 니 다.요구:기록 데 이 터 를 클래스 로 패키지 해 야 합 니 다.
실현 과정
1.먼저 winform 프로젝트 를 만 들 고 메 인 창 에 button,progressbar,lable 을 끌 어 옵 니 다.아래 그림 과 같다.

2.데 이 터 를 처리 하 는 클래스(WriteDate)를 작성 합 니 다.소스 코드 는 다음 과 같 습 니 다.

 public class DataWrite
 {
  public delegate void UpdateUI(int step);//            
  public UpdateUI UpdateUIDelegate;

  public delegate void AccomplishTask();//                  
  public AccomplishTask TaskCallBack;
  
  public void Write(object lineCount)
  {
   StreamWriter writeIO = new StreamWriter("text.txt", false, Encoding.GetEncoding("gb2312"));
   string head = "  , , ";
   writeIO.Write(head);
   for (int i = 0; i < (int)lineCount; i++)
   {
    writeIO.WriteLine(i.ToString() + ",  ,  ");
    //      ,       ui     
    UpdateUIDelegate(1);
   }
   //                 
   TaskCallBack();
   writeIO.Close();
  }
 }

3.메 인 인터페이스의 코드 는 다음 과 같다.
우선 컨트롤 을 만 들 지 않 는 스 레 드 업데이트 컨트롤 을 위 한 의뢰 를 만들어 야 합 니 다.

delegate void AsynUpdateUI(int step);
그리고 다 중 스 레 드 를 작성 하여 데 이 터 를 기록 하 는 방법 과 리 셋 함 수 를 시작 합 니 다.

  private void btnWrite_Click(object sender, EventArgs e)
  {
   int taskCount = 10000; //    10000
   this.pgbWrite.Maximum = taskCount;
   this.pgbWrite.Value = 0;

   DataWrite dataWrite = new DataWrite();//           
   dataWrite.UpdateUIDelegate += UpdataUIStatus;//           
   dataWrite.TaskCallBack += Accomplish;//            

   Thread thread = new Thread(new ParameterizedThreadStart(dataWrite.Write));
   thread.IsBackground = true;
   thread.Start(taskCount);
  }

  //  UI
  private void UpdataUIStatus(int step)
  {
   if (InvokeRequired)
   {
    this.Invoke(new AsynUpdateUI(delegate(int s)
    {
     this.pgbWrite.Value += s;
     this.lblWriteStatus.Text = this.pgbWrite.Value.ToString() + "/" + this.pgbWrite.Maximum.ToString();
    }), step);
   }
   else
   {
    this.pgbWrite.Value += step;
    this.lblWriteStatus.Text = this.pgbWrite.Value.ToString() + "/" + this.pgbWrite.Maximum.ToString();
   }
  }

  //         
  private void Accomplish()
  {
   //                      
   MessageBox.Show("    ");
  }

효 과 는 다음 과 같 습 니 다:
 
총결산
비동기 업데이트 ui 를 실현 하 는 데 는 여러 가지 방법 이 있 지만 저 는 이런 방식 이 비교적 유연 하고 실시 간 으로 작업 진행 상 태 를 얻 을 수 있 으 며 이에 상응하는 처 리 를 할 수 있다 고 생각 합 니 다.이 모드 는 여러 스 레 드 를 사용 하여 서로 다른 데 이 터 를 다른 파일 에 동시에 기록 하 는 데 도 적 용 됩 니 다.
소스 코드 다운로드 주소:Winform_jb51.rar
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.

좋은 웹페이지 즐겨찾기