我正在制作一个简单的应用程序,但进展缓慢:它会创建请求、填写 header 并为我获取网页。我发现为了更新 UI(按下按钮后)我必须像这样使用调度程序:
Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Send, new delegate_onearg_s(UpdateStatus), "Sending Request...");
在这种情况下,我有一个 UpdateStatus(string message) 设置我的 label_Status = message;
到目前为止一切顺利。现在我希望它首先从文本框中获取输入,然后将其转换为稍后用于创建请求的 URL,但我该怎么做呢?我试过这个:
string url = Convert.ToString(Dispatcher.BeginInvoke(System.Windows.Threading.DispatcherPriority.Send, new delegate_string_get(GetInput)));
GetInput() 在这种情况下只是返回 textBox.Text; 这实际上不起作用 - 它返回一些与调度程序相关的通用内容。
如何从 UI 线程中的文本框中获取变量并通过调度程序在工作线程中获取它?
谢谢:)
附言。很有可能我不知道自己在做什么。回答时请记住这一点。
最佳答案
您的方向是正确的,但是您需要使用 Invoke
,而不是 BeginInvoke
。 BeginInvoke
在调度程序线程上异步执行委托(delegate),但您需要同步获取结果。
string url = (string)Dispatcher.Invoke(new Func<string>(GetInput));
关于c# - 如何在工作线程中从 UI 线程获取变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6005576/