C# XAML Windows 8应用程序:尝试读取或写入受保护的内存。这通常表示其他内存已损坏
在清除可观察集合时发生此问题。 这是XAML Windows 8应用程序 示例代码-C# XAML Windows 8应用程序:尝试读取或写入受保护的内存。这通常表示其他内存已损坏,c#,xaml,windows-8,windows-runtime,windows-8.1,C#,Xaml,Windows 8,Windows Runtime,Windows 8.1,在清除可观察集合时发生此问题。 这是XAML Windows 8应用程序 示例代码- private static MovieNewsDataSource _dataSource = new MovieNewsDataSource(); private ObservableCollection<DataGroup> _allGroups = new ObservableCollection<DataGroup>(); public ObservableCollection
private static MovieNewsDataSource _dataSource = new MovieNewsDataSource();
private ObservableCollection<DataGroup> _allGroups = new ObservableCollection<DataGroup>();
public ObservableCollection<DataGroup> AllGroups
{
get { return this._allGroups; }
}
public void MovieNews_DownloadStringCompleted(object sender, ResponseStringArgs e)
{
try
{
var group = new DataGroup("Group-1",
"movie news") { GroupBg = "Green", ItemsRow = "1" };
var newsObject = e.Result.ToSerializeObject<Data.CelebNews>();
foreach (var item in newsObject.CelebNewsItems)
{
group.Items.Add(new DataItem(item.NewsTitleInfo.Id,
item.NewsTitleInfo.Title,
item.Details,"",
item.Thumbnail3,
item.Thumbnail,
item.NewsTitleInfo.Date,
item.Writer,
group));
}
_dataSource.AllGroups.Clear(); //<-- Issue occurs here
if (group.Items.Count > 0)
{
_dataSource.AllGroups.Add(group);
}
}
catch (Exception ex)
{
//TODO: Exception handling
_dataSource.AllGroups.Clear();
throw ex;
}
finally
{
}
}
private static MovieNewsDataSource _dataSource=new MovieNewsDataSource();
私有ObservableCollection _allGroups=新ObservableCollection();
公共可观测集合所有组
{
获取{返回此。\所有组;}
}
public void MovieNews_下载stringcompleted(对象发送者,响应者args e)
{
尝试
{
变量组=新数据组(“组-1”,
“电影新闻”){GroupBg=“Green”,ItemsRow=“1”};
var newobject=e.Result.ToSerializeObject();
foreach(newObject.CelebNewsItems中的变量项)
{
group.Items.Add(新数据项)(item.newstTitleInfo.Id,
item.NewsTitleInfo.Title,
项目.详情,“,
第3项,
项目.缩略图,
item.NewsTitleInfo.Date,
项目.作者:,
小组),;
}
_dataSource.AllGroups.Clear();//0)
{
_dataSource.AllGroups.Add(组);
}
}
捕获(例外情况除外)
{
//TODO:异常处理
_dataSource.AllGroups.Clear();
掷骰子;
}
最后
{
}
}
例外情况详细信息-
System.AccessViolationException未处理
HResult=-2147467261
消息=尝试读取或写入受保护内存。这通常表示其他内存已损坏。
来源=系统
堆栈跟踪:
位于System.Collections.ObjectModel.ObservableCollection1.OnCollectionChanged(NotifyCollectionChangedEventArgs e)
位于System.Collections.ObjectModel.ObservableCollection
1.ClearItems()
位于System.Collections.ObjectModel.Collection`1.Clear()
在DataModel\TrailerDataSource.cs中的Data.TrailerDataSource.TrailerData_下载StringCompleted(对象发送方,ResponseStringArgs e):第376行
在RequestResponseManager.cs:第32行
在System.Runtime.CompilerServices.AsyncMethodBuilderCore.MoveNextRunner.InvokeMoveNext(对象状态机)上
位于System.Threading.ExecutionContext.RunInternal(ExecutionContext ExecutionContext、ContextCallback回调、对象状态、布尔值preserveSyncCtx)
在System.Threading.ExecutionContext.Run(ExecutionContext ExecutionContext,ContextCallback回调,对象状态,布尔保存SyncCTX)
在System.Runtime.CompilerServices.AsyncMethodBuilderCore.MoveNextRunner.Run()中
在System.Threading.Tasks.SynchronizationContextAwaitTaskContinuation.b__3(对象状态)中
位于System.Threading.WinRTSynchronizationContext.Invoker.InvokeCore()处
位于System.Threading.WinRTSynchronizationContext.Invoker.InvokeInContext(对象thisObj)
位于System.Threading.ExecutionContext.RunInternal(ExecutionContext ExecutionContext、ContextCallback回调、对象状态、布尔值preserveSyncCtx)
在System.Threading.ExecutionContext.Run(ExecutionContext ExecutionContext,ContextCallback回调,对象状态,布尔保存SyncCTX)
在System.Threading.WinRTSynchronizationContext.Invoker.Invoke()中
InnerException:您有什么问题?你有没有试着弄清楚它为什么会发生?简单的代码。。。更改结构等?首先,在错误处理中,您不应
抛出ex
——只应抛出
。其次,在您尝试查找问题时,我将完全删除该错误处理(或ctrl-alt-e并启用break on抛出的CLR异常)_DownloadStringCompleted似乎是一个事件,但您还没有说是什么类型的。。。这似乎与错误有关。