我有一个非常奇怪的问题。我试图在背景工作者的dowork事件中从组合框中获取数据。
{{{0.698039, 0.996078, 0.262745}, {0., 0.266667, 1.}, {0.00392157,
0.25098, 0.996078}, {1., 0.65098, 0.}}, {{0.996078, 0.823529,
0.}, {0.498039, 0., 0.00392157}, {0.831373, 0.00392157,
0.00392157}, {0.956863, 0.972549, 0.00784314}}, {{0.909804,
0.00784314, 0.}, {0.87451, 0.996078, 0.0862745}, {0.196078,
0.992157, 0.760784}, {0.00392157, 0.00392157, 0.498039}}, {{1.,
0.878431, 0.}, {0.588235, 0.00392157, 0.00392157}, {0.00392157,
0.0666667, 0.996078}, {0.996078, 0.517647, 0.}}}
这就是问题所在。它只是没有进入那里,即使它是真的。在正常的空隙中检查它并且它起作用,所以它只是在dowork事件中。但我怎么应该调用这个,我想我只需要调用当我试图修改ui上的对象。真的很奇怪,如果有人能够清除一点,我会很高兴的!
答案 0 :(得分:0)
您需要使用我不记得如何在Windows窗体中访问的Dispatcher(它是遗留技术,我已经有近10年未触及它了)。在WPF中有一个静态的Application类,它暴露出来,但为了使你的ViewModel(或Windows Forms case Presenter)单元可测试,你应该将它暴露为一个可注入的接口。
答案 1 :(得分:0)
最好的选择是在启动<script>
var para = document.createElement("p");
var node = document.createTextNode("This is new.");
para.appendChild(node);
var element = document.getElementById("div1");
element.appendChild(para);
</script>
时简单地将所需数据(如果您的示例正确,将一个简单的字符串)传递给长时间运行的任务,以便它可以独立于UI运行。
如果您真的想从工作线程访问UI,可以这样做:
<div id="div1">
</div>
<script>
var tag ="ios,android,windows"; //initialize variable
var data = tag.split(","); //this makes an array of ios,andrid,windows
var i = 0;
while (i < 3){
alert(i);
var para = document.createElement("p");
var node = document.createTextNode(data[i]);
para.appendChild(node);
var element = document.getElementById("div1");
element.appendChild(para);
i++;
}
</script>
答案 2 :(得分:0)
另一个版本:
string value = "";
sortBox.Invoke(new MethodInvoker(delegate {
if (sortBox.SelectedIndex != -1)
{
value = sortBox.SelectedItem.ToString();
}
}));
Console.WriteLine("value = " + value);