【问题标题】:Dispatching idle events while manually pumping gtk# event loop在手动泵送 gtk# 事件循环时调度空闲事件
【发布时间】:2012-07-05 19:41:48
【问题描述】:

我开发了一个使用 C++/wxWidgets 编写的应用程序,它具有用于脚本和插件的嵌入式 .NET 运行时。

我想将 gtk# 用于插件 GUI,但是由于 gtk 事件循环尚未启动,GUI 没有响应(这是 Windows 上的 wxWidgets,因此它不使用 gtk 作为后端)。

这可以通过在 wxWidgets 空闲处理期间抽事件循环来解决:

public void OnWxWidgetsIdle()
{
    while(Gtk.Application.EventsPending())
        Gtk.Application.RunIteration();
}

但这似乎不会触发 gtk# 空闲事件,因此依赖于空闲事件的 GUI 小部件(例如文本框中闪烁的光标)不会正确更新。

有谁知道我可以如何强制发送 gtk# 空闲事件,或任何其他解决此问题的替代方案?

亲切的问候,

安德鲁·沃德。

【问题讨论】:

    标签: mono gtk wxwidgets gtk#


    【解决方案1】:

    在 Mono 端使用空闲处理程序:

    void Start ()
        {
        GLib.Idle.Add (new IdleHandler (OnIdleCreateThumbnail));
        }
    
    bool OnIdleCreateThumbnail ()
        {
        Image img = GetNextImage ();
    
        // If no more images remain, stop the idle handler.
        if (img == null)
           return false; 
    
        CreateThumbnail (img, img.ToString () + ".thumbnail");
    
        // There are more images, invoke this routine again on the next Idle moment.
        return true;           
        }
    

    参考文献

    【讨论】:

      猜你喜欢
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2017-03-02
      • 2014-01-03
      • 1970-01-01
      • 2010-10-19
      相关资源
      最近更新 更多