以下代码;
var c = (char) 1;
var serializer = new XmlSerializer(typeof (string));
var writer = new StringWriter();
serializer.Serialize(writer, c.ToString());
var serialized = writer.ToString();
var dc = serializer.Deserialize(new StringReader(serialized));
Run Code Online (Sandbox Code Playgroud)
在.NET 4中引发此异常.
无效的操作异常 - XML文档中存在错误(2,12).'',十六进制值0x01,是无效字符.第2行,第12位
难道我做错了什么?或者有合理的解决方法吗?
非常感谢!
摘要
我有一个快速变化的大型数据集,我希望将其绑定到UI(带有分组的Datagrid).这些变化分为两个层次;
数据的特征如下;
我遇到问题的关键要求;
我想做什么;
如果第1项具有属性状态,该状态从A - > B - > C - > D移动到我需要/仅想要引发一个"状态"改变事件的区间中,A-> D.
我感谢用户不需要每秒更新数千次UI.如果添加了一个项目,其状态已更改并在UI更新之间的N秒窗口内全部删除,则它永远不会访问DataGrid.
数据网格
DataGrid是我用来显示数据的组件.我目前正在使用XCeed DataGrid,因为它提供了简单的动态分组.我没有在情感上投入其中,如果我可以提供一些动态分组选项(其中包括经常更改的属性),那么股票DataGrid会很好.
我的系统中的瓶颈目前是在项目属性发生变化时重新排序所花费的时间
这占用了YourKit Profiler中98%的CPU.
用不同的方式来表达问题
给定两个BindingList/ObservableCollection实例,这些实例最初相同,但第一个列表已经有一系列额外的更新(您可以监听),生成最小的更改集以将一个列表转换为另一个列表.
外部阅读
我需要的是George Tryfonas 的这个ArrayMonitor的等价物,但是通用它来支持添加和删除项目(它们永远不会被移动).
NB我真的很感谢有人编辑问题的标题,如果他们能想到更好的总结.
编辑 - 我的解决方案
XCeed网格将单元格直接绑定到网格中的项目,而排序和分组功能由BindingList上引发的ListChangedEvents驱动.这有点直观,并排除了下面的MontioredBindingList,因为行将在组之前更新.
相反,我自己包装项目,捕获属性更改事件并将其存储在HashSet中,如Daniel建议的那样.这对我很有用,我会定期迭代这些项目并要求他们通知任何更改.
MonitoredBindingList.cs
这是我对绑定列表的尝试,可以轮询更新通知.可能有一些错误,因为它最终对我没用.
它创建一个添加/删除事件队列,并通过列表跟踪更改.ChangeList与基础列表具有相同的顺序,因此在我们通知添加/删除操作后,您可以针对正确的索引引发更改.
/// <summary>
/// A binding list which allows change events to be polled rather than pushed.
/// </summary>
[Serializable]
public class MonitoredBindingList<T> : BindingList<T>
{
private readonly object publishingLock = …
Run Code Online (Sandbox Code Playgroud) 我通过将'-d'作为命令行参数传递给我的控制台应用程序来附加调试器.这会导致调用以下代码;
bool attachedDebugger = false;
try
{
attachedDebugger = System.Diagnostics.Debugger.Launch();
}
catch (Exception) { }
finally
{
Console.WriteLine(attachedDebugger ? "Debugger Attached" : "Failed to attach debugger");
}
Run Code Online (Sandbox Code Playgroud)
弹出Visual Studio 2010 JIT窗口后,我有时会改变主意,不想调试,所以我忽略了对话框.如果我没有附加一个,那么应用程序会立即退出而不会将任何内容写入控制台.
我知道这是一个边缘用例,如果我不想调试,我应该从命令行中删除'-d'.我的问题的原因是我希望了解发生了什么.
我认为finally块总是被调用,而且如果我们无法附加调试器,我希望我的应用程序继续.
Debugger.Launch()
调用
System.Exit
失败附?编辑谢谢@ Moo-Juice我现在知道返回值false
意味着调试器已经附加,但上面的问题仍未解决.
我有一个 C# 解决方案,它在编译时吐出一个可执行的二进制文件。二进制文件依赖于一个库,它是我编写的另一个解决方案的产物,所有相关代码都是我创建的。
最近,我以一种相当随意的方式尝试了许多项目设置,试图了解 CLR 构建链接的工作原理。不幸的是(可预见的?)我设法打破了我的二进制文件的链接,但我不知道如何解决这个问题。
正在加载程序集........无法在程序集 MY.Library 中添加类型,版本 = 1.0.0.0,文化 = 中性,PublicKeyToken = null - 无法加载一种或多种请求的类型。检索 LoaderExceptions 属性以获取更多信息
>
All probing URLs attempted and failed
*** Assembly Binder Log Entry (22/04/2011 @ 10:34:17) ***
The operation failed. Bind result: hr
= 0x80070002. The system cannot find the file specified.
Assembly manager loaded from: C:\Windows\Microsoft.NET\Framework64\v4.0.30319\clr.dll Running under executable G:\SVN\dev\Debug\MYExecutable.exe
--- A detailed error log follows.
=== Pre-bind state information === LOG: User = UBERIT\gavina LOG: DisplayName …
Run Code Online (Sandbox Code Playgroud) 我非常喜欢Silverlight 4 Toolkit中提供的一些预构建控件
我理解CLR是不同的,但我希望我可以下载源代码并重新编译WPF使用的CLR.
这可能吗?在WPF工具包是很基本的比较,没有令人鼓舞的评论.
非常感谢.
c# ×5
wpf ×2
.net ×1
.net-4.0 ×1
bindinglist ×1
debugging ×1
dll ×1
silverlight ×1
wpftoolkit ×1