在线程中启动 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;
}
}
}
我正在尝试编写一个 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;
}
}
}