我试图弄清楚当你动态生成程序集时,是否有可能引用先前动态生成的程序集中的类型.
例如:
using System;
using System.CodeDom.Compiler;
using System.Reflection;
using Microsoft.CSharp;
CodeDomProvider provider = new CSharpCodeProvider();
CompilerParameters parameters = new CompilerParameters();
parameters.GenerateInMemory = true;
CompilerResults results = provider.CompileAssemblyFromSource(parameters, @"
namespace Dynamic
{
public class A
{
}
}
");
Assembly assem = results.CompiledAssembly;
CodeDomProvider provider2 = new CSharpCodeProvider();
CompilerParameters parameters2 = new CompilerParameters();
parameters2.ReferencedAssemblies.Add(assem.FullName);
parameters2.GenerateInMemory = true;
CompilerResults results2 = provider2.CompileAssemblyFromSource(parameters2, @"
namespace Dynamic
{
public class B : A
{
}
}
");
if (results2.Errors.HasErrors)
{
foreach (CompilerError error in …Run Code Online (Sandbox Code Playgroud) 我有一个看起来像这样的多绑定:
<UserControl.Visibility>
<MultiBinding Converter="{StaticResource isMouseOverToVisibiltyConverter}">
<Binding ElementName="otherElement" Path="IsMouseOver" />
<Binding RelativeSource="{RelativeSource Self}" Path="IsMouseOver" />
</MultiBinding>
</UserControl.Visibility>
Run Code Online (Sandbox Code Playgroud)
而且,我希望能够在两个绑定的IsMouseOver之间添加一个延迟,并将Visibility设置为Collapsed.
我找到了这个DelayBinding实现:http: //www.paulstovell.com/wpf-delaybinding
但是,这对MultiBinding不起作用,而且我一直无法弄清楚如何使用MultiBinding.
我可以选择在代码隐藏中的事件中对Visibility进行更改,这样可以工作,但是如果通过绑定系统有某种方法可以做到这一点会很好.
有没有办法为MultiBinding添加延迟?
编辑:雷,为了让你的类编译和运行,我不得不做一些修复.但是,由于更新没有传播,因此仍然存在问题.它似乎只更新一次目标属性.
[ContentProperty("Bindings")]
public class DelayedMultiBindingExtension : MarkupExtension, IMultiValueConverter, INotifyPropertyChanged
{
public Collection<BindingBase> Bindings { get; private set; }
public IMultiValueConverter Converter { get; set; }
public object ConverterParameter { get; set; }
public CultureInfo ConverterCulture { get; set; }
public BindingMode Mode { get; set; }
public UpdateSourceTrigger UpdateSourceTrigger { get; set; }
public object CurrentValue …Run Code Online (Sandbox Code Playgroud) 我试图在一个非常大的已经存在的同步代码库中使用async/await.在这个代码库中有一些全局状态,如果是kludgy,在同步上下文中工作正常,但它在async/await的异步上下文中不起作用.
所以,我的两个选择似乎是要么分解全局上下文,这可能是一个非常大而且非常耗时的任务,或者在继续运行时做一些聪明的事情.
为了更好地理解async/await和continuations,我做了一个测试程序,如图所示.这里显示.
// A method to simulate an Async read of the database.
private static Task ReadAsync()
{
return Task.Factory.StartNew(() =>
{
int max = int.MaxValue / 2;
for (int i = 0; i < max; ++i)
{
}
});
}
// An async method that creates several continuations.
private static async Task ProcessMany(int i)
{
Console.WriteLine(string.Format("{0} {1}", i.ToString(), 0));
await ReadAsync();
Console.WriteLine(string.Format("{0} {1}", i.ToString(), 1));
await ReadAsync();
Console.WriteLine(string.Format("{0} {1}", i.ToString(), 2));
await ReadAsync();
Console.WriteLine(string.Format("{0} {1}", i.ToString(), 3));
} …Run Code Online (Sandbox Code Playgroud)