我没有为asp.net使用多线程。我有一个Web应用程序将大型临时文件上传到文件夹。我想带上那个临时文件,并在上传后用它做一些其他的事情。我是否可以在另一个线程上完成此工作,而用户不再在网站上?感谢您提供任何帮助或建议。
1.User发布大文件 2.将temp上传到服务器 3.上传完成后。我想运行另一个线程/工作程序,它可以在没有任何用户迭代的情况下运行,但是由用户触发。
void uploading(){
//Uploading file To server
}
void Submitclick(){
Start a Thread
Thread thread = new Thread(DoThreadWork);// does the user still need to be logged in?
Send to another page
}
void DoThreadWork(){Do this in background}
答案 0 :(得分:8)
这绝对有可能,我在ASP.NET中使用了很多背景线程来做一些时髦的东西。如果您完全控制服务器,则在单独的应用程序或Windows服务中运行后台代码可能更为优雅。
让您的IIS应用程序处理响应Web请求的问题更好地分离,而且还没有为此做好准备。
同样是一个警告,如果你在ASP.NET 2.0中有一个后台线程并且它有一个未处理的异常,则默认是重置应用程序池。
此处提供更多信息:http://blogs.msdn.com/b/tess/archive/2006/04/27/584927.aspx
// 3 downvotes?
听着,总是不可能避免在后台线程中运行某些东西。我在几种情况下都遇到了这个问题:
问题是它是否可能。我正在回答这个问题。
答案 1 :(得分:0)
如果您要将文件上传与网站用户互动分开,您可以制作一个Windows服务,该服务将检查文件是否已准备好上传并上传文件。
答案 2 :(得分:-1)
您可以使用线程池。示例代码依赖于以下文章:http://msdn.microsoft.com/en-us/library/3dasc8as(v=vs.80).aspx
首先编写完成工作的方法。该方法必须获得类型为object的1个参数:
public void DoWork(object threadContext)
{
}
,而不是要在方法的位置调用方法:
...
var threadParam = ... // Put any value you want to be used by the DoWork method
ThreadPool.QueueUserWorkItem(DoWork, threadParam );
该方法将排队,直到系统将自由线程处理工作并执行该方法,无论请求是否已经结束。