我在WPF应用程序中得到了这个奇怪的NullReferenceExcpetion。即使我做同样的操作,我也不会每次都这样做。任何人都可以解释原因,
public class AmazonUrl
{
public string Url { get; set; }
}
public partial class MainWindow : Window
{
public ObservableCollection<AmazonUrl> AmazonUrlList { get; set; }
public MainWindow()
{
InitializeComponent();
DataContext = this;
AmazonUrlList = new ObservableCollection<AmazonUrl>();
}
public List<string> getURLList()
{
List<string> urlList = new List<string>();
for(int i = 0; i < AmazonUrlList.Count; i++)
{
AmazonUrl url = AmazonUrlList[i];
if (url == null)
continue;
String str = url.Url.ToString().Trim();
if (str.Length > 0)
urlList.Add(str);
}
return urlList;
}
private void openMenuItem_Click(object sender, RoutedEventArgs e)
{
List<string> urlList = getURLList();//This is where exception occur
OpenFileDialog openFileDialog = new OpenFileDialog();
openFileDialog.Filter = "SCR File (.scr)|*.scr|All Files|*.*";
if (openFileDialog.ShowDialog() != true){ ... }
}
注意:添加这些行后,我对应用程序进行了大量更改,并重新编译了几次。所以这不是构建或编译的问题
编辑:我的堆栈跟踪可以从这里找到https://pastebin.com/2vyH1qah
答案 0 :(得分:1)
我无法重现错误,它必须与您的收藏有关。你的收藏是什么样的? 这应该解决问题 -
public partial class MainWindow : Window
{
private static object lockObj = new object(); //Add
...
public List<string> getURLList()
{
List<string> urlList = new List<string>();
for (int i = 0; i < AmazonUrlList.Count; i++)
{
Amazon url = new AmazonUrl(); // Add
url = AmazonUrlList[i]; // Update
...
private void openMenuItem_Click(object sender, RoutedEventArgs e)
{
lock (lockObj) // Add
{
List<string> urlList = getURLList(); //This is where exception occur
}