0

「ICON000、ICON001からICON 999まで」というシーケンスの画像名を持つ1000個の画像を含むフォルダーがあります。5 秒の時間遅延で順番に WPF イメージ コントロールに表示する必要があります。ファイルダイアログボックスを使用して、特定のフォルダーのパスと対応する画像のプレフィックス (ICON) を取得しました。私は以下のコードを使用しました

string path = null;
string selected_file;
string URI;`enter code here`
openfile.AddExtension = true;
openfile.Filter = "GIF(*.gif)|*.gif|PNG(*.png)|*.png|JPG(*.jpg)|*.jpg|JPEG(*.jpeg)|*.jpeg";
DialogResult result = openfile.ShowDialog();
if (result.ToString() == "OK")
{
selected_file = openfile.FileName;
 Uri uri_temp = new Uri(selected_file);
URI = uri_temp.AbsoluteUri;

 string[] ext = URI.Split('.');
 //textBox1.Text = ext[0];

 string[] ss = ext[0].Split('/');
 int a = ss.Length;

string a1 = ss[a - 1];

string image_prefix = a1.Substring(0, 4);
   string image_no = a1.Substring(4, 3);
   for (int i = 0; i < a-1; i++)
    {
        path = path + ss[i] + "/";
     }
  string path1 = path;

     path = path1 + image_prefix + image_no + "." + ext[1];

   for (int i = 1; i < 999; i++)
    {
        if (i < 10)
       {
           image_no = "00" + i;
        }
       else if (i < 100)
      {
           image_no = "0" + i;
         }
         else
        {
              image_no = i.ToString();
          }
          path = path1 + image_prefix + image_no + "." + ext[1];
           string dasdasd = path;

         string loc = new Uri(path).LocalPath;
           bool asasa = File.Exists(loc);
       if (asasa == true)
          {      System.Threading.Thread.Sleep(5000);
                image1.Source = new BitmapImage(new Uri(dasdasd));
           }
             else
             {
                System.Windows.Forms.MessageBox.Show("File not found");
         }

しかし、画像が表示されません。必要なことを行います....!!

4

2 に答える 2

1

DispatcherTimerを使用して、現在表示されている画像を更新します。

private DispatcherTimer timer = new DispatcherTimer();
private int imageIndex;
private int maxImageIndex;

public MainWindow()
{
    InitializeComponent();
    timer.Tick += TimerTick;
}

private void StartSlideShow(TimeSpan interval, int maxIndex)
{
    imageIndex = 0;
    maxImageIndex = maxIndex;

    timer.Interval = interval;
    timer.Start();
}

private void TimerTick(object sender, EventArgs e)
{
    image.Source = new BitmapImage(new Uri(CreatePath(imageIndex)));

    if (++imageIndex >= maxImageIndex)
    {
        ((DispatcherTimer)sender).Stop();
    }
}

private string CreatePath(int index)
{
    // create image file path from index
    // ...
}

たとえば、呼び出して画像の表示を開始します

StartSlideShow(TimeSpan.FromSeconds(5), 1000);
于 2013-06-07T07:45:41.947 に答える
0

あなたへの呼び出しでThread.Sleep()、UI スレッドをブロックします。そのため、UI に加えた変更は表示されません。

代わりにすべきことは、タイマーを使用することです。クラスi変数を作成します (名前を変更したい場合があります)。タイマーを 5 秒ごとに起動するように設定します。タイマー イベントで、インクリメントiし、次の画像を読み込み、画像コントロールに設定します。Dispatcher.Invoke()非 UI スレッドから UI を変更することはできないため、画像を設定するには Dispatcher ( ) を使用する必要があります。

于 2013-06-07T06:20:12.110 に答える