시간을 많이 소비하는 작업을 수행하기 위해 Backgroudworker를 사용했습니다.BackgroundWorker가 컬렉션 항목에 사용되었습니다.
public void ConnectDataProvider()
{
bgw = new BackgroundWorker();
bgw.DoWork += new DoWorkEventHandler(bgw_DoWork);
bgw.RunWorkerCompleted += new RunWorkerCompletedEventHandler(bgw_RunWorkerCompleted);
}
또 다른 방법은 백그라운드 작업자가 시작됩니다 : 당신이 볼 수 있듯이
void bgw_RunWorkerCompleted(object sender, RunWorkerCompletedEventArgs e)
{
// do it over again
StartPolling();
}
void bgw_DoWork(object sender, DoWorkEventArgs e)
{
// do work
WriteData();
}
, 나는 완료에 작업자를 통해 시작 :
public void StartPolling()
{
bgw.RunWorkerAsync();
}
그럼 내가 이벤트 처리를했다. 이제이 작업은 단일 배경 작업자에게 효과적입니다.
이제 컬렉션이 필요하며 각 항목에서이 작업을 수행해야합니다. 그러나 위의 개념으로 작업자를 시작하기 때문에 시작된 첫 번째 작업자에서 계속 실행됩니다. 나는 타이머가 조합되어 다른 작업자 스레드를 제공 할 수 있다고 생각하고있다.
여전히 BackgroundWorker는 좋은 선택입니까? 내가했던 것처럼 BackgroundWorker를 재사용하는 것이 일반적입니까?
EDIT 1 : clairify하려면 : 내가 직면하고있는 문제는 각각 자신의 BackgroundWorker로 컬렉션을 관리해야한다는 것입니다. 나는 각 항목에서 요청을 주기적으로 시작하기 위해 타이머를 생각하고 있었다. 내가 붙어있는 곳이야.
편집 2 : 본인의 대답을보고이 문제를 해결하지는 못했지만 타이머를 사용하여 내가 원하는 것을 얻을 수 있다는 것을 알았습니다.
EDIT 3 : 달성하기를 원하는 점을 명확히하기 위해 (또 다른 시도, 잘 모르겠다.) 나는 GPS 추적을 위해 추적 개체를 가지고있다. 추적 장치마다 하나의 개체가 있으므로 전체를 추적하려고합니다. 그들은 모두 자주 투표해야합니다. 하나의 테스트 객체에 대해 BackgroundWorker를 설정했는지 확인하십시오. 나는 Backgroundworker가 끝나면 나에게 말해주는 방식을 좋아했다. 하지만 모든 추적 객체로 작업 할 수는 없었습니다.
이제 모든 추적 객체에는 자체 타이머가 있습니다. 이 타이머는 새 스레드를 생성하고 시간 소모적 인 작업을 수행합니다 (이름은 DoWrite 임). 타이머를 처리하고 새 타이머를 만들 때 BackgroundWorker가 필요하지 않습니다. 그게 전부입니다. 여러 시간에 같은 시간에 실행되도록 작업을 소모있을 때
아마도 컬렉션과 타이머 사이에 나타나는 관계를 설명해야합니다. 나는 그 질문에 답할 수 없다. –