首页 / C# / c#-具有一次性参数的后台工作者
c#-具有一次性参数的后台工作者
内容导读
互联网集市收集整理的这篇技术教程文章主要介绍了c#-具有一次性参数的后台工作者,小编现在分享给大家,供广大互联网技能从业者学习和参考。文章包含1980字,纯文字阅读大概需要3分钟。
内容图文
![c#-具有一次性参数的后台工作者](/upload/InfoBanner/zyjiaocheng/659/0fc42406d1a84949a04a801c20900179.jpg)
我有一个后台工作人员,它接收一次性对象作为参数.在using块内部调用RunWorkerAsync方法.
这是一个简化的代码示例
private void SearchTest(string filter)
{
bgWorker.DoWork += bgWorker_DoWork;
using (DirectoryEntry dirEntry = new DirectoryEntry())
{
using (var search = new DirectorySearcher(dirEntry))
{
search.SearchScope = SearchScope.Subtree;
search.Filter = string.Format("(&(objectCategory=group)(cn={0}))", filter);
bgWorker.RunWorkerAsync(search);
}
}
}
void bgWorker_DoWork(object sender, DoWorkEventArgs e)
{
var searcher = (DirectorySearcher) e.Argument;
var reportList = new List<String>();
bgWorker.ReportProgress(0);
SearchResultCollection results = searcher.FindAll();
foreach (SearchResult result in results)
{
reportList.Add(result.Properties["cn"][0]);
bgWorker.ReportProgress(1);
}
e.Result= reportList;
}
这段代码是有效的(即:参数未放在using块的末尾,后台工作程序正在使用using块的末尾时进行工作),但我无法弄清楚using块的工作方式在这种情况下.后台工作程序参数是否被克隆且不会被正确处理,是否会在后台工作程序完成时调用Dispose方法?发生了什么?
编辑:我删除了后台工作程序,并在丹尼尔回答后处置了对象,它仍然可以工作…所以这实际上是DirectorySearcher Disposeparticularity …:
private void SearchTest(string filter)
{
bgWorker.DoWork += bgWorker_DoWork;
using (DirectoryEntry dirEntry = new DirectoryEntry())
{
using (var search = new DirectorySearcher(dirEntry))
{
search.SearchScope = SearchScope.Subtree;
search.Filter = string.Format("(&(objectCategory=group)(cn={0}))", filter);
////////////////////
search.Dispose();
////////////////////
var reportList = new List<String>();
SearchResultCollection results = searcher.FindAll();//Still work with the disposed instance
foreach (SearchResult result in results)
{
reportList.Add(result.Properties["cn"][0]);
}
}
}
}
解决方法:
该对象肯定是在using块的末尾放置的,因此您的背景工作人员正在使用一个放置的实例.
我对它为什么仍然起作用的猜测是DirectorySearcher仅具有Dispose方法,因为它是从Component派生的,实际上并没有使用它,即Dispose不执行任何操作,并且此类的方法不在乎是否处置是否已被调用.
内容总结
以上是互联网集市为您收集整理的c#-具有一次性参数的后台工作者全部内容,希望文章能够帮你解决c#-具有一次性参数的后台工作者所遇到的程序开发问题。 如果觉得互联网集市技术教程内容还不错,欢迎将互联网集市网站推荐给程序员好友。
内容备注
版权声明:本文内容由互联网用户自发贡献,该文观点与技术仅代表作者本人。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌侵权/违法违规的内容, 请发送邮件至 gblab@vip.qq.com 举报,一经查实,本站将立刻删除。
内容手机端
扫描二维码推送至手机访问。