如何加入这两件事?如何创建一个窗口小部件(或任何画布)从另一个线程中绘制它?
答案 0 :(得分:2)
您可以在此处编辑OpenTk源代码下载中的一个示例,以在同一应用程序中拥有GTK#窗口和OpenTK Gamewindow。
在此处下载OpenTK源代码: http://sourceforge.net/projects/opentk/files/latest/download
首先,确保示例通过构建和运行示例来工作。特别试试OpenTK多线程,它应该给你两个带有旋转立方体的窗口。
现在,编辑示例以生成gtk#窗口而不是第二个openTK游戏窗口。
打开文件opentk / Source / Examples / OpenTK / Test / Multithreading.cs
你需要创建一个函数来创建一个gtk窗口,就像这样
static void gtkWindow() {
Application.Init ();
var gtkform = new Gtk.Window("test");
var btn = new Gtk.Button("flip");
btn.Clicked += HandleBtnClicked;
gtkform.Add(btn);
gtkform.ShowAll();
Application.Run();
}
现在编辑主循环以启动此窗口,如下所示:
// launch threads
for (int i = 0; i < ThreadCount; i++)
{
if (i == 0) {
Thread t = new Thread(RunGame);
t.IsBackground = true;
t.Priority = ThreadPriority.BelowNormal;
t.Start();
threads.Add(t);
} else {
Thread t = new Thread(gtkWindow);
t.IsBackground = true;
t.Priority = ThreadPriority.BelowNormal;
t.Start();
threads.Add(t);
}
}
现在,您将在同一个应用程序中拥有一个Gtk#窗口和OpenTK游戏窗口。