private void ShowShareItem()
{
try
{
for (;;)
{
var informaitonDic = new Dictionary<string, Information>();
{
string[] words = null;
{
string searchText = null;
this.Dispatcher.Invoke(DispatcherPriority.Background, new Action(() =>
{
searchText = _searchTextBox.Text;
}));
if (!string.IsNullOrWhiteSpace(searchText))
{
words = searchText.ToLower().Split(new string[] { " ", " " }, StringSplitOptions.RemoveEmptyEntries);
}
}
foreach (var item in _amoebaManager.ShareInformation.ToArray())
{
if (words != null)
{
var text = ((string)item["Path"] ?? "").ToLower();
if (!words.All(n => text.Contains(n))) continue;
}
informaitonDic[(string)item["Path"]] = item;
}
}
var listViewModelDic = new Dictionary<string, ShareListViewModel>();
var removeList = new List<ShareListViewModel>();
this.Dispatcher.Invoke(DispatcherPriority.Background, new Action(() =>
{
foreach (var item in _listViewModelCollection.ToArray())
{
listViewModelDic[item.Path] = item;
if (!informaitonDic.ContainsKey(item.Path))
{
removeList.Add(item);
}
}
}));
var resultList = new List<ShareListViewModel>();
var updateDic = new Dictionary<ShareListViewModel, Information>();
bool clearFlag = false;
var selectItems = new List<ShareListViewModel>();
if (removeList.Count > 100)
{
clearFlag = true;
removeList.Clear();
updateDic.Clear();
foreach (var information in informaitonDic.Values)
{
resultList.Add(new ShareListViewModel(information));
}
var hpath = new HashSet<string>();
this.Dispatcher.Invoke(DispatcherPriority.Background, new Action(() =>
{
hpath.UnionWith(_listView.SelectedItems.OfType<ShareListViewModel>().Select(n => n.Path));
}));
foreach (var item in resultList)
{
if (hpath.Contains(item.Path))
{
selectItems.Add(item);
}
}
}
else
{
foreach (var information in informaitonDic.Values)
{
ShareListViewModel item;
if (listViewModelDic.TryGetValue((string)information["Path"], out item))
{
updateDic[item] = information;
}
else
{
resultList.Add(new ShareListViewModel(information));
}
}
}
this.Dispatcher.Invoke(DispatcherPriority.Background, new Action(() =>
{
bool sortFlag = false;
if (resultList.Count != 0) sortFlag = true;
if (removeList.Count != 0) sortFlag = true;
if (updateDic.Count != 0) sortFlag = true;
if (clearFlag) _listViewModelCollection.Clear();
foreach (var item in resultList)
{
_listViewModelCollection.Add(item);
}
foreach (var item in removeList)
{
_listViewModelCollection.Remove(item);
}
foreach (var item in updateDic)
{
item.Key.Information = item.Value;
}
if (clearFlag)
{
_listView.SelectedItems.Clear();
_listView.SetSelectedItems(selectItems);
}
if (sortFlag) this.Sort();
}));
for (int i = 0; i < 10; i++)
{
Thread.Sleep(1000 * 3);
if (_mainWindow.SelectedTab == MainWindowTabType.Share) break;
}
}
}
catch (Exception)
{
}
}