我在一个简单的应用程序上进展缓慢:它创建了一个请求,填写了标题并为我提取了一个网页。我发现为了更新UI(按下按钮后)我必须像这样使用调度程序:
Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Send, new delegate_onearg_s(UpdateStatus), "Sending Request...");
在这种情况下,我有一个UpdateStatus(字符串消息),它设置我的label_Status = message;
到目前为止一切顺利。现在我希望它首先从文本框中获取输入,然后将其转换为稍后用于创建请求的URL,但我该如何做?我试过这个:
string url = Convert.ToString(Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Send, new delegate_string_get(GetInput)));
在这种情况下,GetInput()只返回textBox.Text; 这确实不起作用 - 它返回一些与调度程序相关的通用事物。
如何从UI线程中的文本框中获取变量并将其与调度程序一起放在工作线程中?
Merci beacoup:)
PS。我很不可能知道自己在做什么。回答时请记住这一点。
答案 0 :(得分:1)
您走在正确的轨道上,但您需要使用Invoke
,而不是BeginInvoke
。 BeginInvoke
在调度程序线程上异步执行委托,但您需要同步获取结果。
string url = (string)Dispatcher.Invoke(new Func<string>(GetInput));
答案 1 :(得分:0)
在启动线程之前,声明一个字符串变量并从textBox中为其赋值,然后在GetInput方法中使用该变量。
string myVal = myTextBox.Text;
... 在GetInput中使用它。