在线程中启动 GameWindow

Starting a GameWindow in a thread

我正在尝试编写一个 OpenTK 应用程序,您可以在其中在控制台中键入命令 window,并让 GameWindow 显示命令的结果。

我的代码如下所示:

public Program : GameWindow
{
    static void Main(string[] args)
    {
        var display = new Program();
        var task = new Task(() => display.Run());
        task.Start();

        while (true)
        {
            Console.Write("> ");
            var response = Console.ReadLine();
            //communicate with the display object asynchronously
         }
    }
}

但是,在任务或线程中启动时不会出现显示window。

为什么会这样?我需要在线程中使用 运行 方法,因为它会在 window.

的生命周期内阻塞

要解决您的特定问题,只需在线程本身上创建 window(在您的情况下为 "display")的实例:

public class Program : GameWindow {
    private static void Main(string[] args) {
        Program display = null;
        var task = new Thread(() => {
            display = new Program();
            display.Run();
        });
        task.Start();
        while (display == null)
            Thread.Yield(); // wait a bit for another thread to init variable if necessary

        while (true)
        {
            Console.Write("> ");
            var response = Console.ReadLine();
            //communicate with the display object asynchronously
            display.Title = response;
        }
    }
}