我使用com interop从vb6 app调用.net 4.0 dll。在.net中,我通过xaml固定文档创建一个xps文档并将其保存到磁盘。这导致内存泄漏,我在这里找到了一个很好的解决方案。
Saving a FixedDocument to an XPS file causes memory leak
上面的解决方案对我有用,涉及这行代码:
Dispatcher.CurrentDispatcher.Invoke(DispatcherPriority.SystemIdle, new DispatcherOperationCallback(delegate { return null; }), null);
这行代码究竟发生了什么。是通过将委托设置为null来处理Dispatcher对象吗?
答案 0 :(得分:1)
虽然最初看起来提供的代码什么都不做,但它实际上有一个非明显的副作用,可以解决您的问题。让我们把它分解为几个步骤:
Dispatcher.CurrentDispatcher
获取当前线程的调度程序。Invoke
在调度程序的线程(当前的)上同步执行提供的委托DispatcherPriority.SystemIdle
设置执行优先级new DispatcherOperationCallback(delegate { return null; })
创建一个不执行任何操作的委托null
作为参数传递给代理总而言之,这似乎没有做任何事情,事实上它实际上确实做到了“没有”。重要的是它等待当前线程的调度程序在执行“无”之前清除了任何优先级高于SystemIdle
的计划任务。这允许在您返回到vb6应用程序之前进行计划的清理工作。