c\#winform 다 중 스 레 드 의 작은 예
텍스트 상자 에 숫자 를 입력 하고 시작 누적 단 추 를 누 르 면 프로그램 은 1 부터 이 숫자 에 누 적 된 결 과 를 계산 합 니 다.이 누적 과정 이 오래 걸 리 기 때문에 UI 스 레 드 에서 직접 진행 하면 현재 창 에 가사 가 발생 합 니 다.더 좋 은 사용자 체험 을 위해 프로그램 은 새로운 스 레 드 를 시작 하여 이 계산 을 단독으로 실행 한 다음 200 밀리초 마다 누적 결 과 를 읽 고 결 과 를 텍스트 상자 아래 label 컨트롤 에 표시 합 니 다.또한 프로그램 은 취소 작업 을 지원 합 니 다.누적 취소 단 추 를 누 르 면 누적 작업 을 취소 하고 현재 누적 값 을 label 에 표시 합 니 다.뒤의 설명 을 편리 하 게 하기 위해 서 나 는 UI 스 레 드 를 메 인 스 레 드 라 고 부 르 고 누적 계산 을 실행 하 는 스 레 드 를 작업 자 스 레 드 라 고 부른다.이 과정 은 두 가지 관건 이 있다.
1:작업 자 스 레 드 에서 메 인 스 레 드 가 만 든 컨트롤 에 접근 하 는 방법;
2:비교적 오래 걸 리 는 계산 을 어떻게 취소 합 니까?
작업 자 스 레 드 에서 누적 과정 을 호출 하 는 데 편리 하도록 나 는 그것 을 하나의 단독 방법 으로 썼 다.다음 과 같다.
1:방법 은 CancellationToken 인 자 를 전달 해 야 합 니 다.취소 작업 을 지원 합 니 다('clr via c\#3 버 전'에 서 는 이러한 방식 을 협력 식 취소 라 고 부 릅 니 다.즉,어떤 조작 은 취 소 를 지원 해 야 취소 할 수 있 습 니 다).
2:작업 자 스 레 드 가 메 인 스 레 드 에 접근 할 수 있 도록 만 든 lblStatus 컨트롤,이 스 레 드 에서 this.Invoke 방법 을 사용 합 니 다.이 방법 은 메 인 스 레 드 가 만 든 컨트롤 에 대한 접근 권 을 얻 는 데 사 용 됩 니 다.이 의뢰 는 매개 변수 로 의뢰 가 필요 합 니 다.이 의뢰 에서 우 리 는 lbl 을 정의 할 수 있 습 니 다.Status 의 조작.예 를 들 어 상례 에서 나 는 현재 의 누적 결 과 를 lbl 에 부 여 했 습 니 다.Status 의 Text 속성 입 니 다.
그 다음 에 우 리 는 공 주 된 스 레 드 에서 시간 을 계산 하 는 작업 을 어떻게 수행 하 는 지 살 펴 보 자.즉,'누적 시작'버튼 의 조작 이다
/// <summary>
/// 1 , CancellationToken
/// </summary>
/// <param name="countTo"> </param>
/// <param name="ct"> </param>
private void CountTo(int countTo, CancellationToken ct) {
int sum = 0;
for (; countTo > 0; countTo--) {
if (ct.IsCancellationRequested) {
break;
}
sum += countTo;
//Invoke lbl_Status
this.Invoke(new Action(()=>lbl_Status.Text = sum.ToString()));
Thread.Sleep(200);
}
}
저 는 스 레 드 탱크 스 레 드 를 사용 하여 이 작업 을 수행 합 니 다.스 레 드 탱크 스 레 드 를 사용 하 는 이 유 는 스 레 드 탱크 가 기본적으로 스 레 드 를 만들어 서 새로운 스 레 드 를 만 드 는 데 발생 하 는 열 자원 소 모 를 줄 이 는 동시에 계산 작업 을 완성 한 후에 이 스 레 드 탱크 스 레 드 는 자동 으로 연못 으로 돌아 가 다음 작업 을 기다 리 기 때 문 입 니 다.나 는cts 는 구성원 변수 로 서 다음 과 같이 설명 합 니 다.
private void btn_Count_Click(object sender, EventArgs e)
{
_cts = new CancellationTokenSource();
ThreadPool.QueueUserWorkItem(state=>CountTo(int.Parse(txt_CountTo.Text),_cts.Token));
}
System.Threading 을 사용 하여 도입 해 야 합 니 다.네 임 스페이스.취소 작업 이 더 간단 합 니 다.코드 는 다음 과 같 습 니 다.
이렇게 해서 우 리 는 winform 에서 다 중 스 레 드 를 사용 하 는 예 를 완 성 했 고 이 예 는 취소 작업 을 지원 합 니 다.전체 코드 는 다음 과 같 습 니 다:
private CancellationTokenSource _cts;
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
[C#]두 개의 폼 띄우기1. Form1 디자인 만들기 2. Form2 디자인 생성 솔루션탐색기에서 프로젝트 우클릭 -> 추가 -> 새 항목 -> 양식(Windows Form) 3. Form1.cs 작성 4. Form2.cs 작성...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.