我尝试将 ObservableCollection 关联到 ListBox,但出现以下错误:应用程序调用了一个为不同线程编码的接口(interface)。 (HRESULT 异常:0x8001010E (RPC_E_WRONG_THREAD))
Prueba.cs 在类里面,我有:
public ObservableCollection<WidgetCollectionItem> WidgetsDownloaded(string e)
{
int alertas = 0;
XDocument document = XDocument.Parse(e);
// Obtener el id
//id = document.Root.Element("id").Value;
ObservableCollection<WidgetCollectionItem> Items = new ObservableCollection<WidgetCollectionItem>();
foreach (XElement wid in document.Root.Elements("widget"))
{
WidgetCollectionItem widget = new WidgetCollectionItem();
widget.captionWid = wid.Attribute("caption") != null ? wid.Attribute("caption").Value : null;
ObservableCollection<ServiciosWidgetCollectionItem> ItemsSer = new ObservableCollection<ServiciosWidgetCollectionItem>();
widget.ItemsSer = ItemsSer;
foreach (XElement service in wid.Elements("service"))
{
ServiciosWidgetCollectionItem ser = new ServiciosWidgetCollectionItem();
ser.captionWid = wid.Attribute("caption") != null ? wid.Attribute("caption").Value : null;
ser.nameWid = wid.Attribute("name") != null ? wid.Attribute("name").Value : null;
ser.nameSer = service.Attribute("name") != null ? service.Attribute("name").Value : null;
ser.captionSer = service.Attribute("caption") != null ? service.Attribute("caption").Value : null;
ser.descripcion = service.Attribute("desc") != null ? service.Attribute("desc").Value : null;
ser.valor = service.Element("xvalue") != null ? service.Element("xvalue").Value : null;
ser.color = service.Element("xcolor") != null ? service.Element("xcolor").Value : null;
ser.alerta = service.Element("xalert") != null ? service.Element("xalert").Value : null;
if (ser.alerta != null) { alertas++; }
ItemsSer.Add(ser);
}
Items.Add(widget);
}
return Items;
}
public class ServiciosWidgetCollectionItem
{
public string captionWid { get; set; }
public string captionSer { get; set; }
public string nameWid { get; set; }
public string nameSer { get; set; }
public string descripcion { get; set; }
public string valor { get; set; }
public string color { get; set; }
public string alerta { get; set; }
}
public class WidgetCollectionItem
{
public string captionWid { get; set; }
public ObservableCollection<ServiciosWidgetCollectionItem> ItemsSer { get; set; }
}
然后从 MainPage 连接到页面,整个过程工作正常,但是当我插入 ListBox ItemsSouces 时出现错误:
public MainPage()
{
this.InitializeComponent();
Prueba prueba = new Prueba();
var request = (HttpWebRequest)WebRequest.Create(new Uri(ruta));
request.BeginGetResponse(r =>
{
var httpRequest = (HttpWebRequest)r.AsyncState;
var httpResponse = (HttpWebResponse)httpRequest.EndGetResponse(r);
using (var reader = new StreamReader(httpResponse.GetResponseStream()))
{
var response = reader.ReadToEnd();
widgetsList.ItemsSource = prueba.WidgetsDownloaded(response);
}
}, request);
}
最佳答案
widgetsList.ItemsSource 只允许从用于创建控件的线程访问。这通常总是 UI 线程。在 MSDN 上,您可以阅读有关 BeginGetResponse 的信息它启动一个异步请求,所以你的委托(delegate)在不同的线程上被调用。在原始线程(UI 线程)中分配响应就可以了。
编辑:参见Run code on UI thread in WinRT例如如何实现这一目标。注意:将启动时的调度程序保存在静态变量中,让您的生活更轻松。
关于c# - (来自 HRESULT : 0x8001010E (RPC_E_WRONG_THREAD)) 的异常,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/15943682/
我正在使用这个:4.times{|i|assert_not_equal("content#{i+2}".constantize,object.first_content)}我之前声明过局部变量content1content2content3content4content5我得到的错误NameError:wrongconstantnamecontent2这个错误是什么意思?我很确定我想要content2=\ 最佳答案 你必须用一个大字母来调用ruby常量:Content2而不是content2。Aconstantnamestart
如何在ruby中调用C#dll? 最佳答案 我能想到几种可能性:为您的DLL编写(或找人编写)一个COM包装器,如果它还没有,则使用Ruby的WIN32OLE库来调用它;看看RubyCLR,其中一位作者是JohnLam,他继续在Microsoft从事IronRuby方面的工作。(估计不会再维护了,可能不支持.Net2.0以上的版本);正如其他地方已经提到的,看看使用IronRuby,如果这是您的技术选择。有一个主题是here.请注意,最后一篇文章实际上来自JohnLam(看起来像是2009年3月),他似乎很自在地断言RubyCL
我正在尝试在Ruby中复制Convert.ToBase64String()行为。这是我的C#代码:varsha1=newSHA1CryptoServiceProvider();varpasswordBytes=Encoding.UTF8.GetBytes("password");varpasswordHash=sha1.ComputeHash(passwordBytes);returnConvert.ToBase64String(passwordHash);//returns"W6ph5Mm5Pz8GgiULbPgzG37mj9g="当我在Ruby中尝试同样的事情时,我得到了相同sha
C#实现简易绘图工具一.引言实验目的:通过制作窗体应用程序(C#画图软件),熟悉基本的窗体设计过程以及控件设计,事件处理等,熟悉使用C#的winform窗体进行绘图的基本步骤,对于面向对象编程有更加深刻的体会.Tutorial任务设计一个具有基本功能的画图软件**·包括简单的新建文件,保存,重新绘图等功能**·实现一些基本图形的绘制,包括铅笔和基本形状等,学习橡皮工具的创建**·设计一个合理舒适的UI界面**注明:你可能需要先了解一些关于winform窗体应用程序绘图的基本知识,以及关于GDI+类和结构的知识二.实验环境Windows系统下的visualstudio2017C#窗体应用程序三.
我如何做Ruby方法"Flatten"RubyMethod在C#中。此方法将锯齿状数组展平为一维数组。例如:s=[1,2,3]#=>[1,2,3]t=[4,5,6,[7,8]]#=>[4,5,6,[7,8]]a=[s,t,9,10]#=>[[1,2,3],[4,5,6,[7,8]],9,10]a.flatten#=>[1,2,3,4,5,6,7,8,9,10 最佳答案 递归解决方案:IEnumerableFlatten(IEnumerablearray){foreach(variteminarray){if(itemisIEnume
我最近从C#转向了Ruby,我发现自己无法制作可折叠的标记代码区域。我只是想到做这种事情应该没问题:classExamplebegin#agroupofmethodsdefmethod1..enddefmethod2..endenddefmethod3..endend...但是这样做真的可以吗?method1和method2最终与method3是同一种东西吗?还是有一些我还没有见过的用于执行此操作的Ruby惯用语? 最佳答案 正如其他人所说,这不会改变方法定义。但是,如果要标记方法组,为什么不使用Ruby语义来标记它们呢?您可以使用
什么是Linq聚合方法的ruby等价物。它的工作原理是这样的varfactorial=new[]{1,2,3,4,5}.Aggregate((acc,i)=>acc*i);每次将数组序列中的值传递给lambda时,变量acc都会累积。 最佳答案 这在数学以及几乎所有编程语言中通常称为折叠。它是更普遍的变形概念的一个实例。Ruby从Smalltalk中继承了这个特性的名称,它被称为inject:into:(像aCollectioninject:aStartValueinto:aBlock一样使用。)所以,在Ruby中,它称为inj
关闭。这个问题是opinion-based.它目前不接受答案。想要改进这个问题?更新问题,以便editingthispost可以用事实和引用来回答它.关闭8年前。Improvethisquestion几年前我去学校学习编程,毕业后我找到了一份系统管理方面的工作,这就是我职业生涯的方向。我想重新开始某种开发,并且一直在“玩”C#和ASP.NET,但我已经听到很多关于其他"new"语言的讨论(新的意思是它们是新的)我)喜欢Ruby和F#。我想我想知道我是否在浪费时间学习主要的MS语言,而不是成为一名通才。很长一段时间没有离开开发社区(如果我曾经离开过的话)让我在潮流中挣扎,我不想落在时代的
我有一个简单的Ruby脚本,我用它在某些HTTPheader上执行private_encrypt以签署要发送到rubyRESTAPI的Web请求,该API会根据Base64编码字符串测试Base64编码字符串生成而不是解码Base64和解密数据然后测试原始字符串。我使用的脚本是require"openssl"require"base64"path_to_cert=ARGV[0].dupplain_text=Base64.decode64(ARGV[1].dup)private_key=OpenSSL::PKey::RSA.new(File.read(path_to_cert))pu
我有以下代码:classProfileLookup基本上包含大量查找数据,按类别拆分。目的是为数据库中的每个类别创建一个方法。通过Rails控制台,此代码按预期工作:ruby-1.9.3@hub:002>ProfileLookup.available_gendersProfileLookupLoad(0.6ms)SELECT"profile_lookups".*FROM"profile_lookups"WHERE"profile_lookups"."category"='gender'ORDERBYvalue=>["Female","Male"]但是,我的规范不合格。以下规范:requ