【发布时间】:2013-12-12 19:35:35
【问题描述】:
我在我的代码中发现了一个错误,我希望得到一个很好的解释。
我正在使用ThreadPool.QueueUserWorkItem 在新线程中执行任务。
原来我的代码是这样的:-
var url = string.Format("{0}{1}", ConfigManager.SiteUrl, CanonicalUrl);
ThreadPool.QueueUserWorkItem(state => vice.WebsiteMessageService.SendSharePropertyMessage(url, txtEmailAddress.Text));
错误在于,当新线程触发我的方法时,它丢失了 txtEmailAddress.Text 的值,因此电子邮件从未发送。
为了纠正这个问题,我做了一个简单的改变:-
var url = string.Format("{0}{1}", ConfigManager.SiteUrl, CanonicalUrl);
string emailAddress = txtEmailAddress.Text;
ThreadPool.QueueUserWorkItem(state => Service.WebsiteMessageService.SendSharePropertyMessage(url, emailAddress));
现在,Thread 有了我的局部变量的值,并且发送了电子邮件。
我的问题是,为什么我的线程不能直接传递文本框值的值?
【问题讨论】:
-
我不明白为什么这被否决了。在我看来,这是一个完全有效的问题。
标签: c# asp.net multithreading