IT정보공유/C#

c# 비동기 처리를 위한 BackgroundWorker, Task Class 사용법

알지오™ 2020. 11. 11.

c#에서는 Thread를 사용할 수 있는 방법이 여러가지가 있습니다.
정석은 누가 뭐래도 Thread를 사용하면 되지만, 
간단하게 사용할 때는 BackgroundWorker 또는 Task를 사용할 수도 있습니다.

Thread 클래스 사용방법은 인터넷에 너무나 많이도 설명되어 있고  BackgroundWorker나 Task는 존재자체를
모르시는분들도 계시기 때문에 한번쯤 사용해 보시면 도움이 되지 않을까 생각됩니다.

일반적으로 Thread, BackgroundWorker, Task 등은 비동기 작업을 위해 사용됩니다. 즉 한 프로세스 내에서, 어떠한 결과를 처리하는데 시간이 오래걸리는 부분이 있어서 UI가 응답없음 상태로 빠지는 경우가 생길수 있는데, 처리부분만 비동기로 처리하게 되면 UI는 응답없음 상태에 빠지지 않게 됩니다. 

 

ex : 진행상태등을 표시하는 ProgressBar 사용 등등

 

특히나 UI 처리를 하는 부분에서 Thread를 사용하게 되면, CrossThread(크로스쓰레드)를 조심해야하는데
BackgroundWorker를 사용할 경우엔 크로스쓰레드가 발생하지 않기때문에 사용하기가 쉽습니다.

이번 백그라운드워커 예제에서는 단순하게 쓰레드 대용으로 백그라운드 작업만 수행하는 코드입니다.

 

 

c# 크로스쓰레드 예방 BackgroundWorker Class 사용 방법

 

//

private void runBackgroundWorker()
{
	BackgroundWorker bgwCollector = new BackgroundWorker();
	bgwCollector.DoWork += BgwCollector_DoWork;
	bgwCollector.RunWorkerAsync();
}

private void BgwCollector_DoWork(object sender, DoWorkEventArgs e)
{
	while(true)
	{
		//..... 처리할 내용
	}
}

//

 

 

C# Thread 대신 사용할 수 있는 Task Class 사용 방법

 

Task는 .NET 4.0에서 도입된 클래스라 꾸준하게 스터디하시는 분들이 아니라면 모르시는 분들이 계실수 있습니다.
마찬가지로 쓰레드와 동일하게 동작하며 쓰레드풀에서 쓰레드를 가져와 비동기 작업을 수행하게 됩니다.
간단하게 샘플코드를 살펴보도록 하죠.

 

//

private void runTask()
{
    Task taskMoviePlay = new Task(new Action(execMoviePlayer));
    taskMoviePlay.Start();
}

private void execMoviePlayer()
{
	//while(true)  // 반복적 작업이 필요한경우 루프를 태우면 됩니다.
	//{
		//..... 무비플레이서 실행 코드
	//}    
}

//

댓글

💲 추천 글