情况是这样的:
我在我的应用程序中有一个实现HTTP服务器的类,所以我可以接受请求。此服务器的目标是使用发送到应用程序的XML刷新图表。
我编写的XML解析器使用了我创建的UserControl,名为NewMeshNode,它在同一个对象中有一些属性和一对图像。当解析器到达创建一个新的NewMeshNode对象时,问题就出现了。
由于NewMeshNode对象有图形部分,所以我使用委托,并将http服务器线程单元状态更改为STA。
在这里,我初始化本地http服务器:
App.localHttpServer =新MyHttpServer(8080);App.localHttpServerThread =新线程(新ThreadStart(App.localHttpServer.listen));
这就是我要求解析器用我收到的XML创建列表的方式:
公共委托ArrayList delListString(string s);。。delListString del =新delListString(App.parser.GetParameters);App.nodeInfo =delListString令牌;
这是解析器的一部分,我在其中创建了一个新的NewMeshNode对象来使用它:
公共ArrayList GetParameters(string xml) { ArrayList parameters=new ArrayList();int sensorCount = 0;MemoryStream ms =新MemoryStream(SensorCount);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 );MemoryStream rms =新MemoryStream(byteArray);XmlReaderSettings设置=新XmlReaderSettings();settings.IgnoreComments=true;settings.IgnoreWhitespace=true;XmlReader xmlr = XmlReader.Create(rms,byteArray);xmlr.Read();string xmlType = xmlr.Name;string currentElement=“;string secondaryElement =”;NewMeshNode node = new NewMeshNode();。。
这是NewMeshNode类:
公共部分类NewMeshNode : UserControl { 公共字符串名称= "";公共字符串mac = "";公共字符串地址= "";公共字符串状态= "";公共int pipeLive = 0;公共双xOnGraph = 0.0;公共双yOnGraph = 0.0;公共字符串pointsTo = "";公共ArrayList传感器=新ArrayList();公共ArrayList oldAddress =新ArrayList();public NewMeshNode() { InitializeComponent();}}
VS总是在调试器进入构造函数时抛出一个InvalidOperation异常,并带有消息:“调用线程必须是STA,因为许多UI组件都需要这样做。”
我做错了什么?
提前感谢!
发布于 2013-09-04 11:39:17
由于其主要原因是线程应该是STA,设置线程并不能解决您的问题,所以您可以尝试本文中提到的一些技巧。比如干净的构建你的解决方案,可视化的工作室设置等等。http://social.msdn.microsoft.com/Forums/vstudio/en-US/d1e17dc5-ea88-453b-b87f-7154e6c6c75a/the-calling-thread-must-be-sta-because-many-ui-components-require-this
https://stackoverflow.com/questions/18589688
复制相似问题