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

标签 c# .net multithreading http dispatcher

我正在制作一个简单的应用程序,但进展缓慢:它会创建请求、填写 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,而不是 BeginInvokeBeginInvoke 在调度程序线程上异步执行委托(delegate),但您需要同步获取结果。

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

关于c# - 如何在工作线程中从 UI 线程获取变量?,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/6005576/

相关文章:

c++ - "const std::stop_token&"或者只是 "std::stop_token"作为线程函数的参数?

java - Java 2D 游戏有多少个线程?

c# - 在 Newtonsoft.Json 中添加多个合约解析器

c# - 进行网络 I/O 时 Stream.Read 是否被缓冲?

c# - 找出具体异常

c# - 从 lambda 中调用函数

c# - 如何调试 Lazy<T>?

c# - 将两个属性联合到普通列表 c#