Форум программистов
 

Восстановите пароль или Зарегистрируйтесь на форуме, о проблемах и с заказом рекламы пишите сюда - alarforum@yandex.ru, проверяйте папку спам!

Вернуться   Форум программистов > .NET Frameworks (точка нет фреймворки) > Общие вопросы .NET
Регистрация

Восстановить пароль
Повторная активизация e-mail

Купить рекламу на форуме - 42 тыс руб за месяц

Ответ
 
Опции темы Поиск в этой теме
Старый 05.03.2012, 19:26   #1
coNsept
Форумчанин
 
Аватар для coNsept
 
Регистрация: 14.12.2009
Сообщений: 716
По умолчанию Добавление элементов в ListView

Вообщем столкнулся с такой проблемой. Пишу свой мп3 плеер, при добавление песен в плейлист в потоке я на время его прячу и отображаю текст блок с текстом мол "Подождите немного".
Проблема собственно вот в чем, когда я прячу листвью и в это время добавляю элементы после того как элементы были добавлены я вновь отображаю листвью но имена элементов я не вижу но они там присутствуют. Вообщем обратите внимание на код, думаю логика будет понятна. Что собственно это такое, почему если листвью колапсед и в это время добавляются элементы и после его отображения их не видно?

Код:
  private void PlayListFillingThread(DragEventArgs e, Thread _TrackListFillingThread)
  {
   string[] DropFiles = (string[])e.Data.GetData(DataFormats.FileDrop, false);

   this.Dispatcher.Invoke((Action)(() =>
   { LibraryPlayList.Visibility = System.Windows.Visibility.Collapsed; }));
   
   foreach (string Files in DropFiles)
   {
    if (System.IO.File.Exists(Files))
    {
     if (string.Compare(Path.GetExtension(Files), ".mp3", true) == 0)
     {
      this.Dispatcher.Invoke((Action)(() =>
      {          
       LibraryPlayList.Items.Add(Files);
      }));
     }
    }
    else if (Directory.Exists(Files))
    {
     DirectoryInfo DirInfo = new DirectoryInfo(Files);

     FileInfo[] DropDir = DirInfo.GetFiles("*.mp3", SearchOption.AllDirectories);

     foreach (FileInfo FilesInfo in DropDir)
     {
      this.Dispatcher.Invoke((Action)(() =>
      {
       LibraryPlayList.Items.Add(FilesInfo.FullName);   
      }));
     }
    }
   }

   this.Dispatcher.Invoke((Action)(() =>
   { LibraryPlayList.Visibility = System.Windows.Visibility.Visible; }));

   _TrackListFillingThread.Abort();
  }

  private void PlayList_Drop(object sender, DragEventArgs e)
  {
   __Thread = new Thread(new ThreadStart(delegate()
   {
    this.PlayListFillingThread(e, __Thread);
   })); 

   __Thread.Start();
  }
coNsept вне форума Ответить с цитированием
Старый 05.03.2012, 19:51   #2
coNsept
Форумчанин
 
Аватар для coNsept
 
Регистрация: 14.12.2009
Сообщений: 716
По умолчанию

Проблема решена, если кто столкнется... Вообщем, изменять состояние элемента (visible, hidden, collapsed) в потоке не рекомендуется, даже можно сказать нельзя потому что не известно как он может себя вести. У меня то отображалось то нет.
coNsept вне форума Ответить с цитированием
Ответ


Купить рекламу на форуме - 42 тыс руб за месяц



Похожие темы
Тема Автор Раздел Ответов Последнее сообщение
Добавление данных в ListView coNsept C# (си шарп) 2 08.03.2012 12:23
Добавление текста в ListView Dima DDM Помощь студентам 2 30.10.2011 21:06
Добавление в ListView xakkkkker Общие вопросы Delphi 3 31.10.2010 15:06
Добавление текста в listview bulldog5293 Общие вопросы Delphi 13 12.08.2010 10:00
Добавление элементов ListView SnakeMan Помощь студентам 4 30.11.2007 11:54