2011-09-27 6 views
2

아직이 해결책을 찾을 수 없습니다 ... 누군가 나를 도울 수 있기를 바랍니다.Backgroundworker 내에서 타이머를 사용하는 C# #

사용자가 취소 할 때까지 실행되는 backgroundworker가 있습니다 (소켓에서 데이터를 읽고 파일에 씁니다).

이제 출력 파일을 일정 기간 후에 분할하려고합니다. 예 : 매 2 분마다 새 파일이 생성됩니다.

이 내가, 타이머를 사용하는

private void bckWrkSocket_DoWork(object sender, DoWorkEventArgs e) 
{ 
//create timer and set its interval to e.Argument 
//start timer 

while(true) 
{ 
    if(timer.finished == true) 
    { 
    //close old file and create new 
    //restart timer 
    } 
... 
} 
} 

어떤 제안/아이디어 같은 것을하고 싶은 일을 위해?

편집 : 스톱워치가 트릭을했습니다.

private void bckWrkSocket_DoWork(object sender, DoWorkEventArgs e) 
{ 
long targettime = (long) e.Argument; 
Stopwatch watch = new Stopwatch(); 
if (targettime > 0) 
      watch.Start(); 
while(true) 
{ 
    if ((targettime > 0) && (watch.ElapsedMilliseconds >= targettime)) 
    { 
    ... 
    watch.Reset(); 
    watch.Start(); 
    } 
} 

답변

3

Stopwatch을 사용하고 while 루프의 경과에서 확인 같은 threading.Timer의를 사용할 수 있습니다 재산 . 이렇게하면 같은 파일을 동시에 작성하고 닫는 것을 방지 할 수 있습니다.

+0

스톱워치가 트릭을했습니다. 감사! – metacircle

+0

승인 된 답변으로 표시하십시오. – riezebosch

0

타이머 틱 수를 저장할 전역 변수를 정의 여기 내 솔루션은 것은 여기 내 솔루션입니다.

int timerCount = 0; 

-

private void bckWrkSocket_DoWork(object sender, DoWorkEventArgs e) 
{ 
    timer.Tick += new EventHandler(TimerEventProcessor); 

    // Sets the timer interval to 1 minute. 
    timer.Interval = 60000; 
    timer.Start(); 
} 

-

public void TimerEventProcessor(Object myObject, 
             EventArgs myEventArgs) { 

    if(timerCount % 2 == 0) 
     //Do you works 

    timerCount++; 

} 
+0

'timer.Start()'를 호출 한 직후에 bgw가 종료 될 것입니다. (하지만이 스레드를 우연히 만났습니다. 테스트하지 않았습니다) – Assimilater

1

당신은 너무

private static void bckWrkSocket_DoWork(object sender, DoWorkEventArgs e) 
{ 
    var timer = new Timer(x => 
    { 
     lock (file) 
     { 
      // close old file and open new file      
     } 
    }, null, 0, (int)e.Argument); 

    while(true) 
    { 
     if (bckWrkSocket.CancellationPending) { e.Cancel = true; return; } 
     // check socket etc. 
    } 
} 
1

디자인 관점에서 작성 및 파일 분할 문제를 구분할 것입니다. 당신은 log4net (NLog?)의 소스 코드를 조사하고 싶을 수 있습니다. 왜냐하면, 일부 데이터를 잃어 버리지 않도록 조심해야 할 수도 있기 때문에 파일 첨부 어 펜더를 구현하고 있기 때문입니다.

관련 문제