C# WinForm 에서 작업(Work) 스레드에서 GUI Control 을 직접 호출하거나 변경하려는 경우 에러 발생
작업 스레드에서 GUI Control 을 호출하는 경우 아래의 순서를 따른다.
1. 호출하려는 컨트롤의 InvokeRequired 속성을 쿼리한다.
2. InvokeRequired 의 결과가 true 인 경우, delegate 를 이용하여 Invoke 를 호출한다.
3. InvokeRequired 의 결과가 false 인 경우 컨트롤을 직접 호출한다.
Thread workThread;
private void btnWorkThreadStart_Click(object sender, EventArgs e)
{
this.workThread = new Thread(new ThreadStart(this.SetText));
this.workThread.Start();
}
private void _SetText()
{
this.textBox1.Text = "Hello World !");
}
private void SetText(string text)
{
if (this.textBox1.InvokeRequired)
{
this.BeginInvoke(new Action(() => _SetText(text)));
}
else
{
_SetText();
}
}
'C# > C# Troubleshooting' 카테고리의 다른 글
CS0227 (0) | 2022.10.23 |
---|---|
error CS8630: C# 7.3의 'nullable' 값 'Enable'이(가) 잘못되었습니다. 언어 버전 '8.0' 이상을 사용하세요. (0) | 2022.09.26 |
PInvokeStackImbalance (0) | 2022.08.29 |
MSB3392 (0) | 2022.08.12 |
MSB3270 빌드 중인 프로젝트의 프로세서 아키텍처 참조의 프로세서 아키텍처 "XXX" 이(가) 일치하지 않습니다. (0) | 2022.08.12 |