【发布时间】:2013-07-24 10:56:27
【问题描述】:
我有一个简单的 ASP.NET 小程序,我正在尝试学习基本的多线程以使其运行更顺畅。
假设我有一个连接到以下方法的按钮:
private NlSearch search;
protected void SearchButtonClick(object sender, EventArgs e)
{
int resultCount = search.MakeRequests(SearchForm.Text);
resultsLabel.Text += SearchForm.Text + ": " + resultCount.ToString() + " occurances";
}
MakeRequests 所做的只是发出一个 POST 请求以在 3rd 方网站上进行搜索,并从响应中获取结果数量。然后将搜索词与结果数量一起添加到页面中。
但是,如果我要在第一个搜索响应之前提交新搜索等操作,它只会中断原始搜索,并且只有最近的搜索会将其结果写入标签。
我知道有一种方法可以使用 C# 线程来执行此操作,但我无法弄清楚如何正确使用任务来执行此操作。我尝试将方法的主体放入不带参数的第二个方法中,然后我用它来创建和运行任务,但这并没有改变行为,所以我认为我错误地使用了任务。
任何帮助或建议将不胜感激,谢谢。
编辑:到目前为止我已经尝试过:这两个答案似乎都在检索值时“起作用”,但由于某种原因,由于某种原因,它们实际上都没有添加到标签中。例如
protected void NewSearchClick(object sender, EventArgs e)
{
new Thread(() => MakeRequest(SearchForm.Text)).Start();
}
和
protected void MakeRequest(string text)
{
int resultCount = search.MakeRequests(text);
if (resultsLabel != null) resultsLabel.Text += text + ": " + resultCount + " occurances";
}
似乎检索到了值,但标签没有改变。
【问题讨论】:
-
线程 t = new Thread(new ThreadStart(YourMethod));?编辑:您也可以使用 ThreadPool 类。欲了解更多信息,请查看:msdn.microsoft.com/en-us/library/aa645740(v=vs.71).aspx
-
向我们展示您的尝试。基于此,我可能会告诉你该往哪个方向看。在深入研究任务之前,您可能需要先检查线程和线程池。
-
为什么不禁用“搜索”按钮,直到收到第一个响应或超时?
-
@KappaG3 我不会尝试自己做这些事情,你可以快速运行线程池。 .NET 允许与任务进行托管并行。我会使用这种东西:msdn.microsoft.com/en-us/library/…
-
看我最近的回答,你想用 Dispatcher 的线程,这样在任务运行时 UI 不会被阻塞,标签会得到更新
标签: c# multithreading http asynchronous web