Best to just use the tool (Microsoft's GIFAnimator, available through an MSDN subscription) and see what it produces with a hex viewer. Keep the GIF specification handy so you can correlate what you see with the spec.
I created a very simple GIF file with two 8x8 frames, typed "frame 1" for the first one and "number 2" for the second. Which produced this hex dump:
I highlighted the relevant blocks in red. They match section 24 in the spec, "Comment extension":
The Comment Extension contains textual information which
is not part of the actual graphics in the GIF Data Stream. It is suitable
for including comments about the graphics, credits, descriptions or any
other type of non-control and non-graphic data. The Comment Extension
may be ignored by the decoder, or it may be saved for later processing;
under no circumstances should a Comment Extension disrupt or interfere
with the processing of the Data Stream.
This block is OPTIONAL; any number of them may appear in the Data Stream.
Note how each of them is followed by a 21 F9 block, a "Graphic control extension" block, section 23 in the spec. It describes each frame in the image file, the "delay time" value is crucial. Which is then followed by 2C, a "Image descriptor" block, section 20 in the spec. It contains the image data for each frame.
Answering your specific questions:
Is this field something that the GIF specification aproves?
Yes, explicitly as outlined in section 24. It is entirely up to the app to use them as it sees fit. They are merely annotational and don't mean anything in particular to another GIF utility or image consumer.
Where is located? In one of these methods?
No, that code doesn't write the comment, it only emits the 21 F9 and 2C blocks. Simply alter the code to insert the 21 FE block ahead of it. Something like this:
protected void WriteGraphicCtrlExt(string comment)
{
if (!string.IsNullOrEmpty(comment)) {
fs.WriteByte(0x21);
fs.WriteByte(0xfe);
var bytes = Encoding.ASCII.GetBytes(comment);
fs.WriteByte((byte)bytes.Length);
fs.Write(bytes, 0, bytes.Length);
fs.WriteByte(0);
}
// Rest of code
//...
}