在手动泵送gtk#事件循环时调度空闲事件

时间:2012-07-05 11:48:21

标签: mono gtk wxwidgets gtk#

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

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

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

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

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

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

亲切的问候,

Andrew Ward。

1 个答案:

答案 0 :(得分:0)

在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;           
    }

<强>参考