单声道c#TextView缓冲区反序列化保持崩溃

时间:2015-04-07 18:39:22

标签: c# mono gtk#

我无法弄清楚为什么会一直崩溃!我已将此插入到一个方法中,该方法显示FileChooser允许用户选择一个文件,然后如果选择了文件则运行这段代码。我已经注释掉运行程序的行并系统地跟踪它到缓冲区。反序列化行。在添加此行之前,它将运行并且不会崩溃。粗略的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>

更新:我做了一些修改,尝试从程序中获取一些调试信息,因为它运行它的方式只是崩溃并且在崩溃时没有给出任何价值。我现在从调试器中得到它。

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)

1 个答案:

答案 0 :(得分:0)

我能够停止崩溃,但现在还有其他问题试图让它正常运行。最初的问题不再是问题。

通过更改

解决原件问题

到此代码

private string mimeType = "text/plain";
...
buffer.Deserialize ( 
                    mainEditor.Buffer, 
                    mainEditor.Buffer.RegisterDeserializeTagset(mimeType), 
                    ref iterator, 
                    data, 
                    (ulong)data.LongLength
                );

它需要一个正确的mimeType,否则它会崩溃,即使文档说它会将null作为有效选项除外!