I take it the info you are talking about is concerning the video. You should not get a crash based on not having shown all the widgets. Whether they are shown or not they are still in memory as a full fledged GObject. I imagine you would get a crash if you try to retrieve information about a video that hasn't been loaded into memory yet. So yes you would be best to do this primarily through gstreamer. You can still generate your bare info screen first, but fill the fields in when you have this information. Use the bus of your pipeline to set up signals, e.g.:
Code:
bus=gst_pipeline_get_bus(GST_PIPELINE(pipeline));
gst_bus_add_signal_watch(bus);
g_signal_connect(bus, "message::state_changed", G_CALLBACK (cb_state_change), NULL);
or scan for tags (
http://gstreamer.freedesktop.org/data/doc/gstreamer/head/manual/html/chapter-metadata.html).
g_timeout_add works fine and is quite normal for keeping track of a running process, e.g. the time currently into the stream, and doesn't have to be done too regularly (200ms will update fast enough for most timing purposes). CPUs for the last two decades have been able to handle such time-sharing functions with ease. I even have a little credit card sized computer that can handle blu-ray playback.