我们有一个第三方库,内部使用SafeHandle来处理非托管资源.在某些错误情况下,必须处理对象并重新创建它.但是,dispose实现中存在一个错误,阻止Handle在这些情况的子集中被关闭.这可以防止在终结器运行之前成功创建新对象.
在我们可以修复第三方代码之前,已经提出了两个解决方案(两者都是邪恶的)来处理这个问题:
运行a GC.Collect以使终结器运行并清理对象
如果处理失败,请使用反射来处理Handle并关闭它
哪一个不那么邪恶,为什么?还有一些我们没有考虑过的方法比其中任何一种方法都不那么邪恶吗?
在Silverlight 4中,我有一个自定义服务类,它有一个异步的Completed事件.在Completed事件中,我获取返回的数据并通过以下方式调用populate方法:
private void service_Completed(object sender, CompletedEventArgs args)
{
Dispatcher.BeginInvoke(() => populateInbox(args.Jobs));
}
private void populateInbox(List<JobViewModel> jobs)
{
inbox.DataContext = jobs;
}
Run Code Online (Sandbox Code Playgroud)
BeginInvokeSL4中的工作,但是当我将它移植到WPF时,我收到以下错误:
无法将lambda表达式转换为类型'System.Delegate',因为它不是委托类型
我尝试将其更改为一个内联的,匿名的,参数化的代表:
Dispatcher.BeginInvoke(delegate(List<JobViewModel> jobs)
{
inbox.DataContext = jobs;
});
Run Code Online (Sandbox Code Playgroud)
但是,这会产生相同的编译时错误.
知道如何在WPF中使用它吗?重构使用BackgroundWorker它不是我的选择.
我正在尝试开发一个应用程序,但随后突然出现了这些警告.我试过禁用我的反病毒(Avira),但它仍然无法正常工作.
Warning 1 Resolved file has a bad image, no metadata, or is otherwise inaccessible. Could not load file or assembly 'MyAssembly.dll' or one of its dependencies. This assembly is built by a runtime newer than the currently loaded runtime and cannot be loaded. ConsoleApplication1
Warning 2 The referenced component 'MyAssembly' could not be found.
Run Code Online (Sandbox Code Playgroud)
有人可以帮帮我吗?谢谢!
c# ×3
.net ×1
asynchronous ×1
begininvoke ×1
dll ×1
reference ×1
reflection ×1
warnings ×1
wpf ×1