Thread 사용 시 컨트롤에 접근하기 입니다.
Thread를 사용하여 컨트롤에 접근했을 때 cross-thread exception 이 발생합니다.
exception 발생 안하고 컨트롤에 접근하는 방법입니다.
using System;
using System.Threading;
using System.Windows.Forms;
namespace ThreadTest
{
/// <summary>
/// 메인폼 클래스 입니다.
/// </summary>
public partial class MainForm : Form
{
#region Fields
/// <summary>
/// 스레드 입니다.
/// </summary>
private Thread thread;
#endregion
// Construcotr (Public)
#region MainForm() - 생성자 입니다.
/// <summary>
/// 생성자 입니다.
/// </summary>
public MainForm()
{
InitializeComponent();
#region 이벤트를 설정합니다.
this.startButton.Click += startButton_Click;
#endregion
}
#endregion
// Event Method (Private)
#region startButton_Click(sender, e) - 시작 버튼 클릭시 동작합니다.
/// <summary>
/// 시작 버튼 클릭시 동작합니다.
/// </summary>
/// <param name="sender">이벤트 발생자 입니다.</param>
/// <param name="e">이벤트 인자 입니다.</param>
private void startButton_Click(object sender, EventArgs e)
{
this.Enabled = false;
this.thread = new Thread(new ThreadStart(IncreaseNumber));
this.thread.Start();
}
#endregion
// Method (Private)
#region IncreaseNumber() - 숫자를 증가시킵니다.
/// <summary>
/// 숫자를 증가시킵니다.
/// </summary>
private void IncreaseNumber()
{
for(int i = 0; i < 10; i++)
{
this.Invoke(new Action(delegate()
{
this.numberDisplayTextBox.Text = i.ToString();
}));
Thread.Sleep(1000);
}
this.Invoke(new Action(delegate()
{
this.Enabled = true;
}));
}
#endregion
}
}
728x90
'C# > Winform' 카테고리의 다른 글
C# / Winform ListBox 데이터 소스에 바인딩 안될 때 해결방법 입니다. (0) | 2019.06.02 |
---|---|
C# / Winform BackgroundWorker로 컨트롤에 접근하기. (0) | 2019.05.29 |
C# / Winform KeyDown 이벤트 동작 시 반응이 없을때. (1) | 2019.05.26 |
C# / Winform 폰트 변경 시 트루타입이 아니라 폰트 변경 안될때. (1) | 2019.05.26 |
C# / Winform 텍스트 박스의 값이 입력 안되었을 경우 메시지 박스 출력하기.(유효성 검사) (0) | 2019.05.07 |
댓글