我正在更新管理某些.NET程序集的PowerShell脚本.该脚本是针对针对.NET 2构建的程序集(与PowerShell运行的框架的相同版本)编写的,但现在需要使用.NET 4程序集以及.NET 2程序集.
由于.NET 4支持运行针对旧版本框架构建的应用程序,因此最简单的解决方案是在需要针对.NET 4程序集运行时,使用.NET 4运行时启动PowerShell.
如何使用.NET 4运行时运行PowerShell?
某些System.Threading.Tasks.Task
构造函数将a CancellationToken
作为参数:
CancellationTokenSource source = new CancellationTokenSource();
Task t = new Task (/* method */, source.Token);
Run Code Online (Sandbox Code Playgroud)
令我感到困惑的是,从方法体内部无法实际获取传入的令牌(例如,没有什么比这样Task.CurrentTask.CancellationToken
).必须通过某种其他机制提供令牌,例如状态对象或在lambda中捕获.
那么在构造函数中提供取消令牌的目的是什么呢?
在将使用SlimDX并因此具有非托管代码的项目转换为.NET 4.0时,我遇到了以下错误:
混合模式程序集是针对运行时的版本"v2.0.50727"构建的,如果没有其他配置信息,则无法在4.0运行时加载.
谷歌搜索给了我解决方案,这是将其添加到应用程序配置:
<configuration>
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0"/>
</startup>
</configuration>
Run Code Online (Sandbox Code Playgroud)
我的问题是,做了useLegacyV2RuntimeActivationPolicy
什么?我找不到任何关于它的文档.
AFAIK,它所知道的是,在某些时候,它SetResult
或SetException
方法被调用以Task<T>
通过其Task
属性完成暴露.
换句话说,它充当a Task<TResult>
及其完成的生产者.
如果我需要一种方法来异步执行Func并有一个Task来表示该操作.
public static Task<T> RunAsync<T>(Func<T> function)
{
if (function == null) throw new ArgumentNullException(“function”);
var tcs = new TaskCompletionSource<T>();
ThreadPool.QueueUserWorkItem(_ =>
{
try
{
T result = function();
tcs.SetResult(result);
}
catch(Exception exc) { tcs.SetException(exc); }
});
return tcs.Task;
}
Run Code Online (Sandbox Code Playgroud)
可以使用*如果我没有Task.Factory.StartNew
- 但我确实有Task.Factory.StartNew
.
题:
可有人请举例相关的情景解释直接到TaskCompletionSource
而不是一个假想中,我没有的情况 Task.Factory.StartNew
?
假设,我有这个界面,
interface IContact
{
IAddress address { get; set; }
}
interface IAddress
{
string city { get; set; }
}
class Person : IPerson
{
public IContact contact { get; set; }
}
class test
{
private test()
{
var person = new Person();
if (person.contact.address.city != null)
{
//this will never work if contact is itself null?
}
}
}
Run Code Online (Sandbox Code Playgroud)
Person.Contact.Address.City != null
(这可以检查City是否为空.)
但是,如果Address或Contact或Person本身为null,则此检查将失败.
目前,我能想到的一个解决方案是:
if (Person != null && Person.Contact!=null && Person.Contact.Address!= null && Person.Contact.Address.City != …
Run Code Online (Sandbox Code Playgroud) 可能重复:
如何向C#控制台应用程序添加计时器
实现计时器的最佳方法是什么?代码示例会很棒!对于这个问题,"最佳"被定义为最可靠(最少数次失火)和精确.如果我指定15秒的间隔,我希望每15秒调用一次目标方法,而不是每10到20秒调用一次.另一方面,我不需要纳秒精度.在这个例子中,该方法每14.51-15.49秒触发一次是可以接受的.
我有点困惑Parallel.ForEach
.它究竟
是什么Parallel.ForEach
以及它究竟做了什么?
请不要引用任何MSDN链接.
这是一个简单的例子:
string[] lines = File.ReadAllLines(txtProxyListPath.Text);
List<string> list_lines = new List<string>(lines);
foreach (string line in list_lines)
{
//My Stuff
}
Run Code Online (Sandbox Code Playgroud)
我该如何重写这个例子Parallel.ForEach
?
我有一个类似的模型:
public class SampleModel
{
public Product Product { get; set; }
}
Run Code Online (Sandbox Code Playgroud)
在我的控制器中,我尝试打印出异常
@Html.TextBoxFor(p => p.Product.Name)
Run Code Online (Sandbox Code Playgroud)
这是错误:
Exception: An expression tree may not contain a dynamic operation
Run Code Online (Sandbox Code Playgroud)
如果有人能给我一些如何解决这个问题的线索我真的很感激!
默认情况下,此DLL在Visual Studio 2010项目中添加.这个新组件用于什么?在使用Reflector查看它之后似乎没有多少内容,谷歌似乎也没有太多可说的.
我收到以下异常:
混合模式程序集是针对运行时的版本"v2.0.50727"构建的,如果没有其他配置信息,则无法在4.0运行时加载.
因为我试图从我的WPF程序导出水晶报告......
我已经在app.config中添加了以下内容......
<startup useLegacyV2RuntimeActivationPolicy="true">
<supportedRuntime version="v4.0" sku=".NETFramework,Version=v4.0"/>
</startup>
<runtime>
<NetFx40_LegacySecurityPolicy enabled="true"/>
</runtime>
Run Code Online (Sandbox Code Playgroud)
任何专家都可以帮忙????
参考资料我发现:http: //www.davidmoore.info/2010/12/17/running-net-2-runtime-applications-under-the-net-4-runtime
.net-4.0 ×10
.net ×5
c# ×5
.net-4.5 ×1
ado.net ×1
app-config ×1
asp.net-mvc ×1
c#-4.0 ×1
mixed-mode ×1
null ×1
powershell ×1
razor ×1