gpt4 book ai didi

C#线程与返回变量的函数

转载 作者:行者123 更新时间:2023-11-30 22:20:37 25 4
gpt4 key购买 nike

好吧,基本上我有一个返回字符串的函数,但是为了获取该字符串,它使用了 webrequest,这意味着当它执行该 webrequest 时,表单将被锁定,除非我将它放在不同的线程中。

但是我想不出一种方法来捕获线程中的返回数据,因为它是使用 thread.start 开始的,这是一个空白。

有什么帮助吗?

当前代码如果对任何人都重要:

string CreateReqThread(string UrlReq)
{
System.Threading.Thread NewThread = new System.Threading.Thread(() => CreateReq(UrlReq));
string ReturnedData = "";
return ReturnedData;
}

string CreateReq(string url)
{
try
{
WebRequest SendReq = WebRequest.Create(url);

SendReq.Credentials = CredentialCache.DefaultCredentials;
SendReq.Proxy = WebRequest.DefaultWebProxy; //For closed port networks like colleges
SendReq.Proxy.Credentials = CredentialCache.DefaultCredentials;
SendReq.Timeout = 15000;

System.IO.StreamReader Reader = new System.IO.StreamReader(SendReq.GetResponse().GetResponseStream());
string Response = Reader.ReadToEnd();
Reader.Close();
return Response;
}
catch (WebException e)
{
EBox(e.Message, "Unknown Error While Connecting");
return null;
}
}

最佳答案

执行此操作的常用方法是使用 Task<T>而不是线程:

Task<string> CreateReqThread(string UrlReq)
{
return Task.Factory.StartNew() => CreateReq(UrlReq));

// In .NET 4.5, you can use (or better yet, reimplement using await/async directly)
// return Task.Run(() => CreateReq(UrlReq));
}

然后您可以调用 Task<T>.Result获取返回值(稍后),在需要时,或在任务上安排一个继续,该任务将在任务完成时运行。

这看起来像:

var request = CreateReqThread(theUri);
request.ContinueWith(t =>
{
// Shove results in a text box
this.textBox.Text = t.Result;
}, TaskScheduler.FromCurrentSynchronizationContext());

这也适用于新的 await/async C# 5 中的支持。

关于C#线程与返回变量的函数,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/14844185/

25 4 0
Copyright 2021 - 2024 cfsdn All Rights Reserved 蜀ICP备2022000587号
广告合作:1813099741@qq.com 6ren.com