如何在工作线程中从UI线程中获取变量?

时间:2011-05-14 23:57:17

标签: c# .net multithreading http dispatcher

我在一个简单的应用程序上进展缓慢:它创建了一个请求,填写了标题并为我提取了一个网页。我发现为了更新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。我很不可能知道自己在做什么。回答时请记住这一点。

2 个答案:

答案 0 :(得分:1)

您走在正确的轨道上,但您需要使用Invoke,而不是BeginInvokeBeginInvoke在调度程序线程上异步执行委托,但您需要同步获取结果。

string url = (string)Dispatcher.Invoke(new Func<string>(GetInput));

答案 1 :(得分:0)

在启动线程之前,声明一个字符串变量并从textBox中为其赋值,然后在GetInput方法中使用该变量。

string myVal = myTextBox.Text;

...    在GetInput中使用它。