循环浏览图像文件夹并逐个显示图像

时间:2013-01-23 17:04:17

标签: c# wpf

我是c#和WPF的新手,并尝试构建一个循环浏览文件夹并逐个显示图像的应用程序。当显示最后一个时,它需要再次显示第一个。

我尝试命名所有文件1.jpg,2.jpg等等,然后循环浏览图片数量。但是,如果我删除一个,那么就会出错。

有没有更好的方法来实现这个目标?

我正在使用C#和WPF窗口,网格中有图像。

任何帮助都会受到很大关注!

编辑:当前代码

private string[] files;
    private System.Timers.Timer timer;

    private int counter;
    private int Imagecounter;

    public IntroScreen()
    {
        InitializeComponent();
        this.Loaded += new RoutedEventHandler(this.MainWindow_Loaded);
    }

    private void MainWindow_Loaded(object sender, RoutedEventArgs e)
    {

        setupPics();
    }



    private void setupPics() 
    {
        timer = new System.Timers.Timer();
        timer.Elapsed += new ElapsedEventHandler(timer_Tick);
        timer.Interval = (2000);
        timer.Enabled = true;
        timer.Start();

        files = Directory.GetFiles("../../Resources/Taken/", "*.jpg", SearchOption.TopDirectoryOnly);
        Imagecounter = files.Length;
        counter = 0;
    }

    private void timer_Tick(object sender, EventArgs e)
    {
        counter++;

       Dispatcher.BeginInvoke(DispatcherPriority.Input, new ThreadStart(() =>
            {
                Picture.Source = new BitmapImage(new Uri(files[counter - 1], UriKind.Relative));
            }));

       if (counter == Imagecounter)
       {
           counter = 0;
       }

    }

这不起作用,它找到文件夹中的项目,但图像不会改变。

它不会返回错误,图像也不会显示。

有人有任何建议吗?

1 个答案:

答案 0 :(得分:1)

以下使用RX对我有用。

的Xaml

<Image Grid.Row="1" Source="{Binding AppViewModel.MainImageSource}"  Width="400" Stretch="Uniform"  Margin="{StaticResource MarginNormalControl}" />

查看型号:

SlideshowImages = ( from path in Directory.EnumerateFiles( pathSlideshow )
                    select new Uri( path ) ).ToList();
if ( SlideshowImages.Any() )
{ 
    SlideshowIndex = 0;
    var timer = Observable.Interval( TimeSpan.FromSeconds( 2 ) ).TimeInterval();
    timer.Subscribe( _ =>
                 {
                     ++SlideshowIndex;
                     if ( SlideshowIndex >= SlideshowImages.Count() )
                         SlideshowIndex = 0;
                     MainImageSource = SlideshowImages[SlideshowIndex];
                 } );
}