2012-06-13 66 views
0

我試圖在正確的時間
現在我有一個例外在屏幕上顯示字幕

的代碼:C#顯示字幕

using System; 
using System.Collections.Generic; 
using System.Linq; 
using System.Text; 
using System.Timers; 
class Program 
{ 
    private static Queue<Subtitle> _subtitles; 

    private static Subtitle _activeSubtitle; 

    private static TimeSpan _currentTime = new TimeSpan(); 

    static void Main(string[] args) 
    { 
     _subtitles = new Queue<Subtitle>(); 

     Subtitle title1 = new Subtitle() 
     { 
      StartTime = TimeSpan.Parse("00:00:06,000"), 
      EndTime = TimeSpan.Parse("00:00:07,400"), 
      Text = "Enjoy the movie!" 
     }; 

     Subtitle title2 = new Subtitle() 
     { 
      StartTime = TimeSpan.Parse("00:00:07,500"), 
      EndTime = TimeSpan.Parse("00:00:09,500"), 
      Text = "Hi, my name is Mary" 
     }; 

     Subtitle title3 = new Subtitle() 
     { 
      StartTime = TimeSpan.Parse("00:00:22,000"), 
      EndTime = TimeSpan.Parse("00:00:85,100"), 
      Text = "Hello my name is John." 
     }; 

     _subtitles.Enqueue(title1); 
     _subtitles.Enqueue(title2); 
     _subtitles.Enqueue(title3); 

     Timer timer = new Timer(ShowSubtitles, null, 0, 100); 

     while (_currentTime <= new TimeSpan(0, 0, 0, 30)) 
     { 

     } 
     Console.WriteLine("End"); 
    } 

    private static void ShowSubtitles(object state) 
    { 

     if (_activeSubtitle == null && _subtitles.Count > 0) 
      _activeSubtitle = _subtitles.Dequeue(); 
     Console.WriteLine(_currentTime); 

     if (_activeSubtitle != null) 
     { 


      if (_currentTime >= _activeSubtitle.StartTime && _currentTime <= _activeSubtitle.EndTime) 
       Console.WriteLine("\t{0}", _activeSubtitle.Text); 

      if (_currentTime >= _activeSubtitle.EndTime) 
       _activeSubtitle = null; 
     } 
     _currentTime = _currentTime.Add(new TimeSpan(0, 0, 0, 0, 100)); 

    } 
} 

internal class Subtitle 
{ 
    public TimeSpan StartTime { get; set; } 
    public TimeSpan EndTime { get; set; } 
    public string Text { get; set; } 
} 

例外:
定時器定時器=新定時器( ShowSubtitles,null,0,100);
「System.Timers.Timer」不包含一個構造函數4個參數

+0

使用System.Threading.Timer代替System.Timer,因爲線程計時器支持回調方法dueTime和waitingperiod。 –

+0

@Romil:OP不使用WinForms計時器。 – Groo

+0

http://msdn.microsoft.com/en-us/library/system.timers.timer.aspx – jrummell

回答

0

你需要改變你的T定義爲System.Threading.Timer或重新定義如何使用System.Timers.Timer,其定義與http://msdn.microsoft.com/en-us/library/system.timers.timer.aspx一致。

它可能會讓人困惑,因爲在C#中至少有三種類型的Timer - 在System.Timers,System.Threading和System.Windows.Forms中!