C#-BackgroundWoker 작업
Background Woker에는 DoWork,ProgressChanged,RunWorkerCompleted가 각각 백그라운드에서 이벤트를 처리하고 진행 보고와 이벤트를 처리하는 데 사용된다.
DoWork의 위임 형식은 void(object sender, DoWork EventArgs args)입니다.이 의뢰는 백엔드 라인에서 처리해야 할 일을 처리하는 데 사용됩니다.또한 이 의뢰에서 BackgroundWorker를 사용해야 하는CancellationPending 속성으로 사용자를 검사할 때 백엔드 라인을 취소하고, 백엔드 라인을 취소하려면 DoWork EventArgs의Cancel 속성을true로 설정해야 한다. 그러면 RunWorker Completed 이벤트에서 백엔드 라인이 정상적으로 종료되었는지 사용자가 종료되었는지 확인할 수 있다.
ProgressChanged의 위임 형식은 void(object sender, ProgressChanged Event Args args)입니다.이 위탁 사용자는 사용자에게 현재 라인의 진도를 보고합니다.특정 진행률은 PorgressChangedEventArgs 매개 변수의 ProgressPercentage 속성에서 얻을 수 있으며 이 속성은 1부터 100까지의 Int입니다.주의해야 할 것은 DoWork 의뢰에서 Background Woker의 Report Progress () 방법을 사용한 후에만 Progress Changed 이벤트를 출발할 수 있으며, 이 방법은 1부터 100까지의 Int 파라미터를 받아들인다는 것이다.
RunWorker Completed의 위임 형식은void(object sender, RunWorker Completed Event Argsargs)입니다.이 위임 사용자는 BackgroundWorker가 완료되면 호출(트리거)합니다.RunWorker Completed EventArgs 매개 변수의 cancel 속성을 검사하면 정상적으로 종료되었는지 사용자가 종료되었는지 확인할 수 있습니다.
BackgroundWorker 클래스의 일반적인 방법으로는 RunWorker Async(), Cancel Async(), ReportProgress()가 있습니다.RunWokerAsync() 메서드는 백그라운드 스레드를 시작하는 데 사용됩니다.Cancelasync () 방법은 스레드를 종료하는 데 사용되지만, 그는 실제로 스레드를 종료하지 않고, BackgroundWorker의 CancellationPending 속성을 ture로 수정한 다음, DoWork 이벤트에서 이 속성을 검출함으로써 백엔드 스레드를 종료합니다.ReportProgress는 ProgressChanged 이벤트를 트리거하는 데 사용되며, DoWork에서 ReportProgress () 방법을 호출하지 않으면 ProgressChanged 이벤트가 발생하지 않습니다.
BackgroundWorker 클래스의 상용 속성은CancellationPending, IsBusy,WorkerReportsProgressWorkerSupportsCancellation입니다.그들은 모두 bool형이다.CancellationPending은 현재 백그라운드 스레드를 종료할지 여부를 나타냅니다.IsBusy 는 현재 백그라운드 스레드가 실행 중임을 나타냅니다.앞의 이 두 가지는 모두 읽기 전용형이다.Worker Reports Progress는 진행 상태 보고서가 지원되는지 여부를 나타냅니다.WorkerSupportsCancellation은 백엔드 스레드 터미널이 지원되는지 여부를 나타냅니다.
다음 예는 다음과 같습니다.
using System;
using System.ComponentModel;
using System.Threading;
namespace Ch22
{
class WebData
{
private BackgroundWorker bgWorker;
public WebData()
{
bgWorker=new BackgroundWorker();
bgWorker.WorkerSupportsCancellation=true;
bgWorker.WorkerReportsProgress=true;
bgWorker.DoWork+=GetData;
bgWorker.RunWorkerCompleted+=Complete;
bgWorker.ProgressChanged+=ReportProgress;
}
public void Start()
{
if(bgWorker!=null)
{
bgWorker.RunWorkerAsync();
}
}
public void Cancel()
{
if(bgWorker.IsBusy)
{
try
{
bgWorker.CancelAsync();
}
catch(Exception e)
{
Console.WriteLine(e.Message);
}
}
}
private void GetData(object sender,DoWorkEventArgs args)
{
for(int i=0;i<100;i++)
{
if(bgWorker.CancellationPending)
{
args.Cancel=true;
break;
}
bgWorker.ReportProgress(i);
Thread.Sleep(1000);
}
}
private void Complete(object sender,RunWorkerCompletedEventArgs args)
{
if(args.Cancelled)
{
Console.WriteLine("BackgroundWorker has been Cancelled");
}
else
{
Console.WriteLine("BackgroundWoker has completed");
}
}
private void ReportProgress(object sender,ProgressChangedEventArgs args)
{
Console.SetCursorPosition(0,3);
Console.WriteLine("Geting Data...{0}%",args.ProgressPercentage);
}
}
class Program
{
public static void Main()
{
WebData bg=new WebData();
bg.Start();
while(true)
{
if(Console.KeyAvailable)
{
Console.ReadKey();
bg.Cancel();
}
}
}
}
}
이 내용에 흥미가 있습니까?
현재 기사가 여러분의 문제를 해결하지 못하는 경우 AI 엔진은 머신러닝 분석(스마트 모델이 방금 만들어져 부정확한 경우가 있을 수 있음)을 통해 가장 유사한 기사를 추천합니다:
다양한 언어의 JSONJSON은 Javascript 표기법을 사용하여 데이터 구조를 레이아웃하는 데이터 형식입니다. 그러나 Javascript가 코드에서 이러한 구조를 나타낼 수 있는 유일한 언어는 아닙니다. 저는 일반적으로 '객체'{}...
텍스트를 자유롭게 공유하거나 복사할 수 있습니다.하지만 이 문서의 URL은 참조 URL로 남겨 두십시오.
CC BY-SA 2.5, CC BY-SA 3.0 및 CC BY-SA 4.0에 따라 라이센스가 부여됩니다.