让我们列出你发布优秀和最喜欢的扩展方法的答案.
要求是必须发布完整代码并提供示例和如何使用它的说明.
基于对该主题的高度关注,我在Codeplex上设置了一个名为extensionoverflow的开源项目.
请标记您的答案并接受将代码放入Codeplex项目中.
请发布完整的源代码而不是链接.
Codeplex新闻:
24.08.2010 Codeplex页面现在在这里:http://extensionoverflow.codeplex.com/
11.11.2008 XmlSerialize/XmlDeserialize现在已实现并且已经过单元测试.
11.11.2008仍有更多开发人员的空间.;-) 现在加入!
11.11.2008第三个贡献者加入了ExtensionOverflow,欢迎来到BKristensen
11.11.2008 FormatWith现在已实现且已经过单元测试.
09.11.2008第二个贡献者加入了ExtensionOverflow.欢迎来到chakrit.
09.11.2008我们需要更多开发人员.;-)
只是想知道BeginInvoke()和之间的区别Invoke()是什么?
主要是每个人将用于什么.
编辑:创建一个线程对象和调用invoke并只调用BeginInvoke()一个委托有什么区别?或者他们是一样的吗?
我正在阅读和学习有关ThreadSchedulerTasks的文章和文章,并且遇到了ThreadPool.UnsafeQueueUserWorkItem一个关于自己的ThreadSchedulers 的MSDN示例中使用的函数.在关于UnsafeQueueUserWorkItem的MSDN 描述中,有一个很大的警告,即该函数可能是一个安全漏洞,并且它" 不会传播调用堆栈 ".
唯一的联系是QueueUserWorkItem- 从名称 - 似乎是"安全的对应物"?但是没有提到任何关于调用堆栈的事情.
传播堆栈到底意味着什么?在工作开始之前复制它?为什么另一个线程需要调用线程的堆栈呢?我认为他们从一个新的空堆栈开始.毕竟,当线程函数返回时,它不会继续执行调度任务的函数,对吧?
我想从我的库类中引发一系列事件,但我担心一些事件订阅者会很粗鲁并且需要很长时间来处理一些事件,从而阻止了引发事件的线程.我以为我可以通过使用线程池线程来提升每个事件来保护提升线程:
if (packet != null && DataPacketReceived != null)
{
    var args = new DataPacketEventArgs(packet);
    DataPacketReceived.BeginInvoke(this, args, null, null);
}
当事件只有一个订阅者时,这很好,但是一旦第二个订阅者到达,DataPacketReceived就会成为多播委托,并且我得到一个参数异常,并显示错误消息"委托必须只有一个目标".是否有一种简单的方法可以在单独的线程上引发事件,或者我是否必须启动一个线程然后从那里引发事件?