Mono c# TextView 缓冲区反序列化不断崩溃
Mono c# TextView Buffer Deserialize Keeps Crashing
我不明白为什么会一直崩溃!我将此插入到一个方法中,该方法显示 FileChooser 允许用户选择一个文件,然后如果选择了文件 运行 这段代码。我已经注释掉程序中的 运行 行,并系统地跟踪到 buffer.Deserialize 行。它会 运行 并且在添加此行之前不会崩溃。当然,TextView 缓冲区文本并不是每次都会更新。
此外,在您发表评论之前,打开的文件是有效的保存文件,序列化和保存文件的方法完美无缺。只是打开的问题闪退
byte[] data = System.IO.File.ReadAllBytes(fileChooser.Filename);
TextBuffer buffer = new TextView().Buffer;
Gdk.Atom serialFormat = buffer.RegisterDeserializeTagset(null);
ulong length = (ulong) data.LongLength;
TextIter iterator = buffer.StartIter;
buffer.Deserialize ( buffer, serialFormat, ref iterator, data, length );
对于那些想成为聪明人并说这是保存文件的人来说,这里是我试图打开但崩溃的保存文件。嗯,任何文件都会崩溃,但这是我的测试文件。
GTKTEXTBUFFERCONTENTS-0001 Î <text_view_markup>
<tags>
<tag id="0" priority="0">
<attr name="weight" type="gint" value="700" />
</tag>
</tags>
<text><apply_tag id="0">
Bold
</apply_tag>Hello World!</text>
</text_view_markup>
更新: 我做了一些更多的修改,试图从程序中获取一些调试信息,就像它 运行ning 它只是崩溃并给出它崩溃时没有任何价值。我现在从调试器中得到它。
GLib.GException: Line 8 character 1: Anonymous tag found and tags can not be created. at Gtk.TextBuffer.Deserialize(TextBuffer content_buffer, Atom format, TextIter& iter, Byte[] data, UInt64 length)
我能够阻止崩溃,但现在在尝试将其正确设置为 运行 时遇到了其他问题。原来的问题已经不是问题了
通过改变
解决了原来的问题
到此代码
private string mimeType = "text/plain";
...
buffer.Deserialize (
mainEditor.Buffer,
mainEditor.Buffer.RegisterDeserializeTagset(mimeType),
ref iterator,
data,
(ulong)data.LongLength
);
它需要一个正确的 mimeType,否则它会崩溃,即使文档说它会将 null 作为有效选项除外!
我不明白为什么会一直崩溃!我将此插入到一个方法中,该方法显示 FileChooser 允许用户选择一个文件,然后如果选择了文件 运行 这段代码。我已经注释掉程序中的 运行 行,并系统地跟踪到 buffer.Deserialize 行。它会 运行 并且在添加此行之前不会崩溃。当然,TextView 缓冲区文本并不是每次都会更新。
此外,在您发表评论之前,打开的文件是有效的保存文件,序列化和保存文件的方法完美无缺。只是打开的问题闪退
byte[] data = System.IO.File.ReadAllBytes(fileChooser.Filename);
TextBuffer buffer = new TextView().Buffer;
Gdk.Atom serialFormat = buffer.RegisterDeserializeTagset(null);
ulong length = (ulong) data.LongLength;
TextIter iterator = buffer.StartIter;
buffer.Deserialize ( buffer, serialFormat, ref iterator, data, length );
对于那些想成为聪明人并说这是保存文件的人来说,这里是我试图打开但崩溃的保存文件。嗯,任何文件都会崩溃,但这是我的测试文件。
GTKTEXTBUFFERCONTENTS-0001 Î <text_view_markup>
<tags>
<tag id="0" priority="0">
<attr name="weight" type="gint" value="700" />
</tag>
</tags>
<text><apply_tag id="0">
Bold
</apply_tag>Hello World!</text>
</text_view_markup>
更新: 我做了一些更多的修改,试图从程序中获取一些调试信息,就像它 运行ning 它只是崩溃并给出它崩溃时没有任何价值。我现在从调试器中得到它。
GLib.GException: Line 8 character 1: Anonymous tag found and tags can not be created. at Gtk.TextBuffer.Deserialize(TextBuffer content_buffer, Atom format, TextIter& iter, Byte[] data, UInt64 length)
我能够阻止崩溃,但现在在尝试将其正确设置为 运行 时遇到了其他问题。原来的问题已经不是问题了
通过改变
解决了原来的问题到此代码
private string mimeType = "text/plain";
...
buffer.Deserialize (
mainEditor.Buffer,
mainEditor.Buffer.RegisterDeserializeTagset(mimeType),
ref iterator,
data,
(ulong)data.LongLength
);
它需要一个正确的 mimeType,否则它会崩溃,即使文档说它会将 null 作为有效选项除外!