簡體   English   中英

STA線程引發InvalidOperationException

[英]STA thread throws InvalidOperationException

這種情況:

我有一個在我的應用程序中實現HTTP服務器的類,因此我可以接受請求。 該服務器的目標是使用發送到應用程序的XML刷新圖形。

我編寫的XML解析器使用了我創建的UserControl,稱為NewMeshNode,它具有一些屬性和一對附加在同一對象中的圖像。 當解析器到達創建新的NewMeshNode對象的地步時,問題就來了。

由於NewMeshNode對象具有圖形部分,因此我使用委托並將http服務器線程單元狀態更改為STA。

在這里,我初始化本地http服務器:

 App.localHttpServer = new MyHttpServer(8080); App.localHttpServerThread = new Thread(new ThreadStart(App.localHttpServer.listen)); App.localHttpServerThread.SetApartmentState(ApartmentState.STA); App.localHttpServerThread.Name = "HttpServerThread"; App.localHttpServerThread.Start(); 

這是我要求解析器使用收到的XML創建列表的方式:

 public delegate ArrayList delListString(string s); . . . delListString del = new delListString(App.parser.GetParameters); App.nodeInfo = (ArrayList)Dispatcher.CurrentDispatcher.Invoke(del, tokens[0]); 

這是解析器的一部分,其中我創建了一個新的NewMeshNode對象以使用它:

 public ArrayList GetParameters(string xml) { ArrayList parameters=new ArrayList(); int sensorCount = 0; MemoryStream ms = new MemoryStream(); ms.Write(Encoding.UTF8.GetBytes(xml), 0, Encoding.UTF8.GetBytes(xml).Length); ms.Position = 0; byte[] byteArray = ms.ToArray(); string resul = Encoding.UTF8.GetString(byteArray); resul = resul.Substring(resul.IndexOf("\\n") + 1); byteArray = Encoding.UTF8.GetBytes(resul); MemoryStream rms = new MemoryStream(byteArray); XmlReaderSettings settings = new XmlReaderSettings(); settings.IgnoreComments=true; settings.IgnoreWhitespace=true; XmlReader xmlr = XmlReader.Create(rms, settings); xmlr.Read(); string xmlType = xmlr.Name; string currentElement=""; string secondaryElement = ""; NewMeshNode node = new NewMeshNode(); . . . 

這是NewMeshNode類:

公共局部類NewMeshNode:UserControl {

  public string name = ""; public string mac = ""; public string address = ""; public string state = ""; public string type = ""; public int pipeLive = 0; public double xOnGraph = 0.0; public double yOnGraph = 0.0; public string pointsTo = ""; public ArrayList sensors = new ArrayList(); public ArrayList oldAddress = new ArrayList(); public NewMeshNode() { InitializeComponent(); } } 

當調試器進入構造函數時,VS總是拋出InvalidOperation異常,並顯示以下消息:“調用線程必須是STA,因為許多UI組件都需要STA。”

我究竟做錯了什么?

提前致謝!

因為主要的原因是自我說明線程應該是STA,並且對其進行設置不能解決您的問題,所以您可以嘗試本文中提到的一些技巧。.例如干凈地構建解決方案,Visual Studio設置等。http:// social .msdn.microsoft.com / Forums / vstudio / zh-CN / d1e17dc5-ea88-453b-b87f-7154e6c6c75a /該調用線程必須保持穩定,因為許多用戶界面組件需要此

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM