我想等待Task <T>完成一些特殊规则:如果在X毫秒后它还没有完成,我想向用户显示一条消息.如果它在Y毫秒后没有完成,我想自动请求取消.
我可以使用Task.ContinueWith异步等待任务完成(即安排在任务完成时执行的操作),但这不允许指定超时.我可以使用Task.Wait同步等待任务完成超时,但这会阻止我的线程.如何异步等待任务完成超时?
我有以下方法将对象保存到文件:
// Save an object out to the disk
public static void SerializeObject<T>(this T toSerialize, String filename)
{
XmlSerializer xmlSerializer = new XmlSerializer(toSerialize.GetType());
TextWriter textWriter = new StreamWriter(filename);
xmlSerializer.Serialize(textWriter, toSerialize);
textWriter.Close();
}
Run Code Online (Sandbox Code Playgroud)
我承认我没有写它(我只将其转换为带有类型参数的扩展方法).
现在我需要它将xml作为字符串返回给我(而不是将其保存到文件中).我正在研究它,但我还没想到它.
我认为对于熟悉这些对象的人来说这可能很容易.如果不是,我最终会弄明白.
我想将一个字符串转换为一个对象属性值,其名称我作为一个字符串.我试图这样做:
string modelProperty = "Some Property Name";
string value = "SomeValue";
var property = entity.GetType().GetProperty(modelProperty);
if (property != null) {
property.SetValue(entity,
Convert.ChangeType(value, property.PropertyType), null);
}
Run Code Online (Sandbox Code Playgroud)
问题是,当属性类型为可空类型时,这会失败并抛出Invalid Cast Exception.这不是无法转换的值的情况 - 如果我手动执行此操作它们将起作用(例如DateTime? d = Convert.ToDateTime(value);)我已经看到了一些类似的问题,但仍然无法使其工作.
例如,是否存在操作员来处理此问题?
float Result, Number1, Number2;
Number1 = 2;
Number2 = 2;
Result = Number1 (operator) Number2;
Run Code Online (Sandbox Code Playgroud)
在过去,^运算符已经成为其他语言的指数运算符,但在C#中它是一个逐位运算符.
我是否必须编写循环或包含另一个命名空间来处理指数操作?如果是这样,我如何使用非整数处理指数运算?
我需要遍历一个DataTable.我有一个名为的专栏ImagePath.
当我使用时,DataReader我这样做:
SqlDataReader dr = null;
dr = cmd.ExecuteReader();
while (dr.Read())
{
TextBox1.Text = dr["ImagePath"].ToString();
}
Run Code Online (Sandbox Code Playgroud)
我怎样才能使用相同的东西DataTable?
我正在实现一个方法,Task<Result> StartSomeTask()并且在调用方法之前就已经知道了结果.如何创建已完成的Task <T>?
这就是我目前正在做的事情:
private readonly Result theResult = new Result();
public override Task<Result> StartSomeTask()
{
var task = new Task<Result>(() => theResult);
task.RunSynchronously(CurrentThreadTaskScheduler.CurrentThread);
return task;
}
Run Code Online (Sandbox Code Playgroud)
有更好的解决方案吗?
我有一个Visual Studio Windows应用程序项目.我添加了代码来下载安装程序更新文件.完成下载后的安装程序需要管理员权限才能运行.我添加了一个清单文件.
当用户单击DownloadUpdate.exe时,UAC会提示用户输入管理员权限.所以我假设在DownloadUpdate.exe中创建和调用的所有进程都将以管理员身份运行.所以我使用以下代码调用我的下载文件:
Process p = new Process();
p.StartInfo.WindowStyle = ProcessWindowStyle.Hidden;
p.StartInfo.FileName = strFile;
p.StartInfo.UseShellExecute = false;
p.StartInfo.RedirectStandardOutput = true;
p.StartInfo.RedirectStandardError = true;
Run Code Online (Sandbox Code Playgroud) 今天在对我运行的C#MVC站点进行了一些更改之后,我又回去做了一些修改并遇到了这个错误:
缺少编译器需要成员System.Runtime.CompilerServices.ExtensionAttribute..ctor
错误有点模糊(显然除了它的描述),因为它没有给我一个文件,行或列来引用,只有项目.此外,它总共抛出错误20次.在我部署的时间(当时完全正常运行)和现在之间,我只对代码进行了三次更改.我恢复了我的更改,它仍然抛出了同样的错误,这对我来说毫无意义.
我没有在SO或Google上找到关于此错误的大量信息,除了这个家伙解决方案和一些Mono项目错误(我没有使用Mono).上面给出的解决方案需要添加一个类定义,允许编译器解析引用.我并不特别想这样做,因为在此之前我不需要这样做,这会让我的代码变得混乱.
只是好奇,如果有人之前遇到过这个问题.提前致谢!
如何在不使用App.Config的情况下在代码中设置IncludeExceptionDetailInFaults?
我有一些用于某些RESTful服务的XSD架构.当与xsd.exe工具结合使用以生成C#代码时,XSD会xs:date生成以下代码:
[System.Xml.Serialization.XmlElementAttribute(Form=System.Xml.Schema.XmlSchemaForm.Unqualified, DataType="date")]
public System.DateTime time {
get {
return this.timeField;
}
set {
this.timeField = value;
}
}
Run Code Online (Sandbox Code Playgroud)
将XML反序列化为使用XmlSerializerall的对象似乎很好.我面临的问题是服务要求将日期格式化为YYYY-MM-DD hh:mm:ss,并且XSD生成的代码似乎只生成YYYY-MM-DD.
如果我手动修改XSD以进行xs:dateTime输入,则生成的C#代码会产生:2010-08-20T20:07:03.915039Z.
基本上,我如何强制序列化生成YYYY-MM-DD hh:mm:ss?是否可以对XSD做些什么或者我可以做些什么来改变生成的C#代码?
c# ×10
.net ×5
asp.net ×1
asp.net-mvc ×1
exponent ×1
operators ×1
reflection ×1
string ×1
wcf ×1