によってスローだから私のアプリケーションでは、私は、とき私はItemsControl
とUniformGrid
データは、それだけで正常に動作します。この指定された引数が有効な値の範囲外です。パラメータ名インデックス。 ObservableCollection.Add()メソッド
<ItemsControl Name="ImageItemsControl" ItemsSource="{Binding Path=ObservableCollectionSource}">
<ItemsControl.ItemsPanel>
<ItemsPanelTemplate>
<UniformGrid Rows="2" HorizontalAlignment="Stretch" VerticalAlignment="Stretch">
</UniformGrid>
</ItemsPanelTemplate>
</ItemsControl.ItemsPanel>
</ItemsControl>
ようObservableCollection<Image>
にバインドされた使用されたものに関しては、いくつかの画像を表示する必要がありますただプログラムを起動して、 しかし、ある時点で、私はグリッドからすべての画像をアンロードする必要があります。私は戻って画像を追加する必要がある場合、正しく動作しているよう一見
int limit = ObservableCollectionSource.Count -1;
for (int i = limit; i >= 0; i--)
{
ObservableCollectionSource.RemoveAt(i);
}
、しかし:私は私のコレクションに.Clear()
を呼び出す場合、それは私が結合壊すので は、ちょうどこのようなもので、すべての要素の1を削除します(ドラッグアンドドロップ、または開いているファイルダイアログから - 結果は同じです)。 この例外をスローする
指定された引数が有効な値の範囲外です。パラメータ 名前インデックス
私は.Add()
メソッドを呼び出します。ここで
Image img = CreateImage(cImg);
try
{
ObservableCollectionSource.Add(img);
}
catch (Exception ex)
{
MessageBox.Show("Exception has occured: " + ex.Message, "Exception", MessageBoxButton.OK, MessageBoxImage.Warning);
}
私は、ファイルから読み込まれたビットマップから必要な「設定」とWPFのイメージを作成し、そして、私のObservableCollectionに追加してみてください。
それがうまくいかない理由、または私が研究を行うための指示はありますか?
グーグルで回っても何の結果も得られませんでした(たぶん私の検索クエリをうまく策定していないかもしれません)。
私は間違ってバインドしていますか?タスクに間違ったコントロールを使用しますか?
わかりません。
すべてのヘルプは大幅に
EDITを高く評価されています。ここではスタックトレースiは
at System.Windows.Media.VisualCollection.Insert(Int32 index, Visual visual)
at System.Windows.Controls.Panel.AddChildren(GeneratorPosition pos, Int32 itemCount)
at System.Windows.Controls.Panel.OnItemsChangedInternal(Object sender, ItemsChangedEventArgs args)
at System.Windows.Controls.Panel.OnItemsChanged(Object sender, ItemsChangedEventArgs args)
at System.Windows.Controls.ItemContainerGenerator.OnItemAdded(Object item, Int32 index)
at System.Windows.Controls.ItemContainerGenerator.OnCollectionChanged(Object sender, NotifyCollectionChangedEventArgs args)
at System.Windows.WeakEventManager.ListenerList`1.DeliverEvent(Object sender, EventArgs e, Type managerType)
at System.Windows.WeakEventManager.DeliverEvent(Object sender, EventArgs args)
at System.Collections.Specialized.CollectionChangedEventManager.OnCollectionChanged(Object sender, NotifyCollectionChangedEventArgs args)
at System.Collections.Specialized.NotifyCollectionChangedEventHandler.Invoke(Object sender, NotifyCollectionChangedEventArgs e)
at System.Windows.Data.CollectionView.OnCollectionChanged(NotifyCollectionChangedEventArgs args)
at System.Windows.Controls.ItemCollection.OnViewCollectionChanged(Object sender, NotifyCollectionChangedEventArgs e)
at System.Windows.WeakEventManager.ListenerList`1.DeliverEvent(Object sender, EventArgs e, Type managerType)
at System.Windows.WeakEventManager.DeliverEvent(Object sender, EventArgs args)
at System.Collections.Specialized.CollectionChangedEventManager.OnCollectionChanged(Object sender, NotifyCollectionChangedEventArgs args)
at System.Windows.Data.CollectionView.OnCollectionChanged(NotifyCollectionChangedEventArgs args)
at System.Windows.Data.ListCollectionView.ProcessCollectionChangedWithAdjustedIndex(NotifyCollectionChangedEventArgs args, Int32 adjustedOldIndex, Int32 adjustedNewIndex)
at System.Windows.Data.ListCollectionView.ProcessCollectionChanged(NotifyCollectionChangedEventArgs args)
at System.Windows.Data.CollectionView.OnCollectionChanged(Object sender, NotifyCollectionChangedEventArgs args)
at System.Collections.ObjectModel.ObservableCollection`1.OnCollectionChanged(NotifyCollectionChangedEventArgs e)
at System.Collections.ObjectModel.ObservableCollection`1.InsertItem(Int32 index, T item)
at System.Collections.ObjectModel.Collection`1.Add(T item)
at MainDesk.MainWindow.AddImagesToGrid() in D:\MainDesk\MainDesk\UI\MainWindow.xaml.cs:line 427
at MainDesk.MainWindow.AddCarrierImageBtn_Click(Object sender, RoutedEventArgs e) in D:\MainDesk\MainDesk\UI\MainWindow.xaml.cs:line 167
at System.Windows.RoutedEventHandlerInfo.InvokeHandler(Object target, RoutedEventArgs routedEventArgs)
at System.Windows.EventRoute.InvokeHandlersImpl(Object source, RoutedEventArgs args, Boolean reRaised)
at System.Windows.UIElement.RaiseEventImpl(DependencyObject sender, RoutedEventArgs args)
at System.Windows.UIElement.RaiseEvent(RoutedEventArgs e)
at System.Windows.Controls.MenuItem.InvokeClickAfterRender(Object arg)
at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)
at System.Windows.Threading.DispatcherOperation.InvokeImpl()
at System.Windows.Threading.DispatcherOperation.InvokeInSecurityContext(Object state)
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Windows.Threading.DispatcherOperation.Invoke()
at System.Windows.Threading.Dispatcher.ProcessQueue()
at System.Windows.Threading.Dispatcher.WndProcHook(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
at MS.Win32.HwndWrapper.WndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam, Boolean& handled)
at MS.Win32.HwndSubclass.DispatcherCallbackOperation(Object o)
at System.Windows.Threading.ExceptionWrapper.InternalRealCall(Delegate callback, Object args, Int32 numArgs)
at System.Windows.Threading.ExceptionWrapper.TryCatchWhen(Object source, Delegate callback, Object args, Int32 numArgs, Delegate catchHandler)
at System.Windows.Threading.Dispatcher.LegacyInvokeImpl(DispatcherPriority priority, TimeSpan timeout, Delegate method, Object args, Int32 numArgs)
at MS.Win32.HwndSubclass.SubclassWndProc(IntPtr hwnd, Int32 msg, IntPtr wParam, IntPtr lParam)
at MS.Win32.UnsafeNativeMethods.DispatchMessage(MSG& msg)
at System.Windows.Threading.Dispatcher.PushFrameImpl(DispatcherFrame frame)
at System.Windows.Threading.Dispatcher.PushFrame(DispatcherFrame frame)
at System.Windows.Application.RunDispatcher(Object ignore)
at System.Windows.Application.RunInternal(Window window)
at System.Windows.Application.Run(Window window)
at System.Windows.Application.Run()
at MainDesk.App.Main() in D:\MainDesk\MainDesk\obj\Debug\App.g.cs:line 0
at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()
私はその部分を見逃しているに違いない。あなたのプログラムには、一度にコレクションにアクセスできる複数のスレッドが含まれていますか? –
いいえ、私のところにはありません。それは、ユーザーが読み込んだ画像を表示するシンプルな "運動" wpfアプリです。また、それらを一度にロードすることも、1つずつロードすることもできます。 – Michael
'ObservableCollection'が奇妙な方法で壊れていないかぎり、それは考えにくいですが、これは私が考えることができる唯一の説明です。私。何かがコレクションの内部状態を壊してしまいました。通常は、並行性が悪い場合にのみ発生します。あなたは 'Task.Run'や友達のようなもので余分なスレッドを生成していないと確信していますか? –