2012-06-13 2 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'는 아마 System.Threading.Timer

원한 무엇을 사 개 인수

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

와 생성자가없는 4 개 인수

+0

스레딩 타이머가 콜백 메서드 인 dueTime, waitperiod를 지원하므로 System.Threading.Timer 대신 System.Timer를 사용하십시오. –

+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에 다시 정의하십시오.

System.Timers, System.Threading 및 System.Windows.Forms 내부에는 적어도 3 가지 유형의 타이머가 있으므로 혼란 스러울 수 있습니다.