c\#에서 Winform 은 다 중 스 레 드 비동기 업데이트 UI(진도 및 상태 정보)를 실현 합 니 다.
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
이상 이 바로 본 고의 모든 내용 입 니 다.여러분 의 학습 에 도움 이 되 고 저 희 를 많이 응원 해 주 셨 으 면 좋 겠 습 니 다.
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다: