我在一个简单的wpf应用程序中有一个listview,它会抛出一个未处理的异常:http://www.picz.ge/img/s2/1407/6/4/4d2baa8909d8.png
mscorlib.dll中发生未处理的“System.ArgumentOutOfRangeException”类型异常 附加信息:指数超出范围。必须是非负面的 并且小于集合的大小。
我无法理解错误在哪里。
当我设置time=2000;
代码工作正常;
这是代码:
using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;
using System.Threading.Tasks;
using System.Windows;
using System.Windows.Controls;
using System.Windows.Data;
using System.Windows.Documents;
using System.Windows.Input;
using System.Windows.Media;
using System.Windows.Media.Imaging;
using System.Windows.Navigation;
using System.Windows.Shapes;
using System.Diagnostics;
namespace Wpftemp
{
/// <summary>
/// Interaction logic for MainWindow.xaml
/// </summary>
public partial class MainWindow : Window
{
Thread t;
List<Something> listview_source;
int time;
public MainWindow()
{
InitializeComponent();
listview_source = new List<Something>();
listview.ItemsSource = listview_source;
t = new Thread(f);
time = 100;
t.Start();
}
private void f()
{
while (true)
{
listview_source.Clear();
refreshe_source();
App.Current.Dispatcher.Invoke( delegate()
{
listview.Items.Refresh();
});
Thread.Sleep(time);
}
}
private void refreshe_source()
{
for (int i = 0; i < 150; i++)
{
listview_source.Add(new Something(DateTime.Now.Second));
}
}
struct Something
{
public Something(double i)
{
this.i = i;
}
double i;
public double var
{
get { return i; }
set { i = value; }
}
}
}
}
答案 0 :(得分:0)
我认为问题在于使用Dispatcher,因为dispatcher.Invoke()中的代码将在主线程准备执行后执行,所以当Dispatcher.Invoke()中的代码完全正确时,无法保证执行,所以当你增加时间值时,你保证代码已被执行。删除Dispatcher或增加值时间。