2011-09-14 2 views
1

이미지 컨트롤의 로컬 디렉토리에서 내용 (.jpg 파일)을 표시하고 싶습니다. 이미지를 5 초 지연으로 교체해야합니다.이미지 컨트롤의 디렉토리에서 각 이미지 표시

DirectoryInfo dir = new DirectoryInfo(@"D:\somedir"); 
      FileInfo[] files = dir.GetFiles(); 

      foreach (var item in files) 
      { 
       imgBox.Source = (ImageSource)new ImageSourceConverter().ConvertFromString(item.FullName); 
      } 
+0

그리고 무엇이 도움이 필요합니까? –

답변

2

이미지를 메모리에로드 한 다음 정의 된 지연 시간 동안 회전하는 백그라운드 스레드를 사용자에게 보냅니다. 백그라운드 스레드에서 UI 컨트롤에 액세스하려면 Dispatcher 호출이 필요합니다.

List<Image> images; 

void GetImagesIntoAList() 
{ 
    List<Image> images = new List<Image>(); 

    DirectoryInfo dir = new DirectoryInfo(@"D:\somedir"); 
       FileInfo[] files = dir.GetFiles(); 

       foreach (var item in files) 
       {       
        FileStream stream = new FileStream(item.FullName, FileMode.Open, FileAccess.Read); 
        Image i = new Image(); 
        BitmapImage src = new BitmapImage(); 
        src.BeginInit(); 
        src.StreamSource = stream; 
        src.EndInit(); 
        i.Source = src; 
        images.Add(i); 
       } 

    Thread rotator = new Thread(rotate); 
    rotator.Start(); 
} 

void rotate() 
{ 
    foreach(var img in images) 
    { 
     Dispatcher.BeginInvoke(() => 
     { 
     nameOfImageControlOnAWindow.Source = img; 

     } 
    ); 

     Thread.Sleep(5000); 
    } 
} 
+1

이것은 UIThread에서 sleep을 실행합니다 ... –

+0

대신에 우리는'DispatcherTimer'를 사용할 수 있습니다. 또한 왜 스트림에로드할까요? 'IsAsync'를 사용하여'Source' 속성에'Binding'을 실제 작업으로 명시하고 있습니까? –

+0

@ H.B., 올바른, 나는 대답을 고쳤다. –