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

C# 如何在工作线程中从UI线程获取变量?,c#,.net,multithreading,http,dispatcher,C#,.net,Multithreading,Http,Dispatcher,我正在制作一个简单的应用程序,但进展缓慢:它创建一个请求,填写标题并为我获取一个网页。我发现为了更新UI(在按下按钮后),我必须使用dispatcher,如下所示: Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Send, new delegate_onearg_s(UpdateStatus), "Sending Request..."); 在这种情况下,我有一个UpdateStatus(字符串消息),它设

我正在制作一个简单的应用程序,但进展缓慢:它创建一个请求,填写标题并为我获取一个网页。我发现为了更新UI(在按下按钮后),我必须使用dispatcher,如下所示:

Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Send, new delegate_onearg_s(UpdateStatus), "Sending Request...");
在这种情况下,我有一个UpdateStatus(字符串消息),它设置了我的标签\u Status=message

到目前为止还不错。现在我希望它首先从文本框中获取输入,然后将其转换为URL,稍后用于创建请求,但是我该如何做呢?我试过这个:

string url = Convert.ToString(Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Send, new delegate_string_get(GetInput)));
在本例中,GetInput()只返回textBox.Text; 这实际上不起作用-它返回一些与调度器相关的通用内容

如何从UI线程中的文本框中获取变量,并使用dispatcher在工作线程中获取它

谢谢你,比库普:)


另外,我很可能不知道自己在做什么。回答时请记住这一点。

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

string myVal = myTextBox.Text;
。。。
在GetInput中使用它。

您的方法是正确的,但您需要使用
调用
,而不是
开始调用
BeginInvoke
在调度程序线程上异步执行委托,但需要同步获得结果

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

如果应用程序启动时所有字段均为空,并且按下按钮时工作已完成,则需要在按下按钮后而不是之前为字符串赋值,我错了吗?所以在这种情况下,我真的不能对字符串做任何事情,直到我按下按钮,在这种情况下,我被被被按下的按钮所创建的线程所束缚。