如果我没有错,您试图在两个不同的显示器上同时绘制两个不同的应用程序(或者更好地放置两个不同的GraphicsDevice对象)。
让我们先看看正确的东西。
物理上你有一个显示卡和一个显示器。当然,大多数视频交互平台,比如DirectX,OpenGL,XNA等主要在视频卡上播放,而不是处理器,对吧?
现在,在基于编程的概念中,我们有GraphicsDevice类和GraphicsAdapter类。铃响了吗?
虽然GraphicsDevice和Videocart以及GraphicsAdapter和监视器之间没有确切的关联,但这些对象之间存在非常密切的关系。
GraphicsDevice实际上并不代表一个显示卡(尽管Jeff用一种非常简单的方式使其可以理解)。 GraphicsDevice对象是与视频卡的INTERACTOR。类似地,我们可以认为GraphicsDevice对象是一个绘画教师,指示绘画师(视频卡)在哪里绘画。它旨在指导如何完成这些任务。
GraphicsAdapter与监视器的关系稍微靠近一点,所以我们将在我们的比喻中看到它作为画布。
现在让我们来看看。想象一下,我们的绘画师拥有与Videocard支持的GraphicsAdapters一样多的武器。这意味着它可以在同一时间绘制尽可能多的画布。
以编程方式,我们可以为painter及其画布实例化尽可能多的GraphicsDevice。每位教师都可以告诉绘画师在不同的画布上绘制不同的东西。但是,如果两位导师告诉他在同一张画布上绘制不同的东西,画家会不会有点困惑?
当然会。画家一次只能在画布上进行绘画指导(当然,这看起来非常肤浅,但足以理解这个概念)。这就是为什么你不能在同一个适配器上实例化和访问两个图形设备的原因。只要适配器更改其图形设备(教师),其他教师就会“丢失”。意思是说,他在一段时间内没有注意到,直到另一位老师完成了,无论教师告诉画家(比如,使用什么画笔,画什么颜色)都会被遗忘。
GraphicsDevice因此是一个“LostDevice”。因此,当您将另一个应用程序绘制在适配器上时,该视频卡和适配器的任何设备(最近创建或未创建)都将丢失,直到其他应用程序释放实际设备(视频卡)。
只有一个GraphicsDevice可以在一个适配器上同时执行。
正如Jeff所说,在创建其他GraphicsDevice时使用其他适配器(显示器)。另一种选择是协调这两个应用程序的操作,如果您希望绘制到同一个显示器上。其他选项是,你把所有的东西都放在窗口中,因为当事情“窗口化”时,操作系统拥有设备,这意味着操作系统负责组合应用程序的绘图。 (它的问题,不是你的)