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 크로스 스 레 드 에 관 한 자 료 는 저희 의 다른 관련 글 을 주목 하 세 요!
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
C#Task를 사용하여 비동기식 작업을 수행하는 방법라인이 완성된 후에 이 라인을 다시 시작할 수 없습니다.반대로 조인(Join)만 결합할 수 있습니다 (프로세스가 현재 라인을 막습니다). 임무는 조합할 수 있는 것이다. 연장을 사용하여 그것들을 한데 연결시키는 것이...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.