小编dtb*_*dtb的帖子

异步等待Task <T>以超时完成

我想等待Task <T>完成一些特殊规则:如果在X毫秒后它还没有完成,我想向用户显示一条消息.如果它在Y毫秒后没有完成,我想自动请求取消.

我可以使用Task.ContinueWith异步等待任务完成(即安排在任务完成时执行的操作),但这不允许指定超时.我可以使用Task.Wait同步等待任务完成超时,但这会阻止我的线程.如何异步等待任务完成超时?

.net c# task-parallel-library

350
推荐指数
13
解决办法
20万
查看次数

将对象序列化为字符串

我有以下方法将对象保存到文件:

// 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作为字符串返回给我(而不是将其保存到文件中).我正在研究它,但我还没想到它.

我认为对于熟悉这些对象的人来说这可能很容易.如果不是,我最终会弄明白.

c# string serialization xml-serialization

294
推荐指数
6
解决办法
36万
查看次数

Convert.ChangeType()在Nullable Types上失败

我想将一个字符串转换为一个对象属性值,其名称我作为一个字符串.我试图这样做:

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);)我已经看到了一些类似的问题,但仍然无法使其工作.

.net c# reflection

288
推荐指数
5
解决办法
7万
查看次数

C#中是否有指数运算符?

例如,是否存在操作员来处理此问题?

float Result, Number1, Number2;

Number1 = 2;
Number2 = 2;

Result = Number1 (operator) Number2;
Run Code Online (Sandbox Code Playgroud)

在过去,^运算符已经成为其他语言的指数运算符,但在C#中它是一个逐位运算符.

我是否必须编写循环或包含另一个命名空间来处理指数操作?如果是这样,我如何使用非整数处理指数运算?

c# operators exponent

184
推荐指数
5
解决办法
19万
查看次数

如何遍历DataTable

我需要遍历一个DataTable.我有一个名为的专栏ImagePath.

当我使用时,DataReader我这样做:

SqlDataReader dr = null;
dr = cmd.ExecuteReader();
while (dr.Read())
{
    TextBox1.Text = dr["ImagePath"].ToString();
}
Run Code Online (Sandbox Code Playgroud)

我怎样才能使用相同的东西DataTable

c# asp.net

132
推荐指数
5
解决办法
40万
查看次数

创建一个已完成的任务<T>

我正在实现一个方法,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)

有更好的解决方案吗?

.net c# task-parallel-library

118
推荐指数
3
解决办法
4万
查看次数

如何在C#中以管理员模式启动进程

我有一个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)

.net c#

84
推荐指数
6
解决办法
21万
查看次数

"丢失编译器所需成员"错误被多次抛出,几乎没有更改代码

今天在对我运行的C#MVC站点进行了一些更改之后,我又回去做了一些修改并遇到了这个错误:

缺少编译器需要成员System.Runtime.CompilerServices.ExtensionAttribute..ctor

错误有点模糊(显然除了它的描述),因为它没有给我一个文件,行或列来引用,只有项目.此外,它总共抛出错误20次.在我部署的时间(当时完全正常运行)和现在之间,我只对代码进行了三次更改.我恢复了我的更改,它仍然抛出了同样的错误,这对我来说毫无意义.

我没有在SO或Google上找到关于此错误的大量信息,除了这个家伙解决方案和一些Mono项目错误(我没有使用Mono).上面给出的解决方案需要添加一个类定义,允许编译器解析引用.我并不特别想这样做,因为在此之前我不需要这样做,这会让我的代码变得混乱.

只是好奇,如果有人之前遇到过这个问题.提前致谢!

c# asp.net-mvc

80
推荐指数
7
解决办法
6万
查看次数

在WCF的代码中将IncludeExceptionDetailInFaults设置为true

如何在不使用App.Config的情况下在代码中设置IncludeExceptionDetailInFaults?

c# wcf

69
推荐指数
2
解决办法
5万
查看次数

强制XmlSerializer将DateTime序列化为'YYYY-MM-DD hh:mm:ss'

我有一些用于某些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#代码?

.net c# xml-serialization

66
推荐指数
3
解决办法
8万
查看次数