2012-10-08 53 views
1

我正在使用視頻流式算法。我將整個視頻分成了一系列圖像。現在每個圖像將根據時間進行流式傳輸(Image.TimeInMs表示圖像流式傳輸或發送的時間)。保持我有System.Timer.Timer對象的時間。並行運行兩個循環

_timer = new System.Timers.Timer(250); 
_timer.Elapsed += new ElapsedEventHandler(timeCounterIncrementer); 
_timer.Enabled = true; 

for(i =0; i<imageArray.length;i++) 
{ 
    while (timeCounter < imageArray[i].TimeInMs) 
    {       
     StreamImage(); 
    } 
} 

void timeCounterIncrementer(object sender, ElapsedEventArgs e) 
{ 
    timeCounter+=250;    
} 

在上面的代碼while循環運行定時器方法timeCounterIncrementer將不執行時。我希望計時器方法一方面運行而另一方面運行While循環。換句話說,如何並行運行while循環和timer方法?

+0

你可以使用線程並同步腳步嗎? – Roy

+0

我可以使用線程,但無法同步。由於while循環和定時器必須並行執行並且更多地通過其視頻流,因此時間精度是主要要求。定時器的值應該與滑塊的值一致,視頻播放器 –

回答

3

最近我有一個類似的問題。至少我固定它使用Task Parallelism (Task Parallel Library)因爲線程是2 我:)

如果你完成你的兩個環路部分插入方法,你可以調用這兩個方法平行,就像這樣:

Parallel.Invoke(() => DoSomeWork(),() => DoSomeOtherWork()); 
+0

即使我嘗試過這種方法,我把while循環段放在方法中,然後調用它作爲task1,然後我調用_timer.start()作爲task2。但它沒有工作:( –

+0

什麼沒有工作嗎?你對期望什麼發生,甚至並行調用? – eMi

+0

我用Parallel.Invoke(()=> task1,()=> task2);這兩個調用執行但是它們並不是平行的,我想因爲我有定時器對象,每250毫秒調用一個方法,並且這個方法不能用Parallel.Invoke來執行,如果它是兩個不同的循環,那麼這個技術對我來說很有效 –