如果我沒有錯,您試圖在兩個不同的顯示器上同時繪製兩個不同的應用程序(或者更好地放置兩個不同的GraphicsDevice對象)。
讓我們先看看正確的東西。
物理上你有一個顯示卡和一個顯示器。當然,大多數視頻交互平臺,比如DirectX,OpenGL,XNA等主要在視頻卡上播放,而不是處理器,對吧?
現在,在基於編程的概念中,我們有GraphicsDevice類和GraphicsAdapter類。鈴響了嗎?
雖然GraphicsDevice和Videocart以及GraphicsAdapter和監視器之間沒有確切的關聯,但這些對象之間存在非常密切的關係。
GraphicsDevice實際上並不代表一個顯示卡(儘管Jeff用一種非常簡單的方式使其可以理解)。 GraphicsDevice對象是與視頻卡的INTERACTOR。類似地,我們可以認爲GraphicsDevice對象是一個繪畫教師,指示繪畫師(視頻卡)在哪裏繪畫。它旨在指導如何完成這些任務。
GraphicsAdapter與監視器的關係稍微靠近一點,所以我們將在我們的比喻中看到它作爲畫布。
現在讓我們來看看。想象一下,我們的繪畫師擁有與Videocard支持的GraphicsAdapters一樣多的武器。這意味着它可以在同一時間繪製儘可能多的畫布。
以編程方式,我們可以爲painter及其畫布實例化儘可能多的GraphicsDevice。每位教師都可以告訴繪畫師在不同的畫布上繪製不同的東西。但是,如果兩位導師告訴他在同一張畫布上繪製不同的東西,畫家會不會有點困惑?
當然會。畫家一次只能在畫布上進行繪畫指導(當然,這看起來非常膚淺,但足以理解這個概念)。這就是爲什麼你不能在同一個適配器上實例化和訪問兩個圖形設備的原因。只要適配器更改其圖形設備(教師),其他教師就會「丟失」。意思是說,他在一段時間內沒有注意到,直到另一位老師完成了,無論教師告訴畫家(比如,使用什麼畫筆,畫什麼顏色)都會被遺忘。
GraphicsDevice因此是一個「LostDevice」。因此,當您將另一個應用程序繪製在適配器上時,該視頻卡和適配器的任何設備(最近創建或未創建)都將丟失,直到其他應用程序釋放實際設備(視頻卡)。
只有一個GraphicsDevice可以在一個適配器上同時執行。
正如Jeff所說,在創建其他GraphicsDevice時使用其他適配器(顯示器)。另一種選擇是協調這兩個應用程序的操作,如果您希望繪製到同一個顯示器上。其他選項是,你把所有的東西都放在窗口中,因爲當事情「窗口化」時,操作系統擁有設備,這意味着操作系統負責組合應用程序的繪圖。 (它的問題,不是你的)