小编Gus*_*ori的帖子

'POCO'的定义

有人可以定义'POCO'的含义吗?我越来越频繁地遇到这个词,我想知道它是否只是关于普通课程还是更多意味着什么呢?

class poco

228
推荐指数
7
解决办法
9万
查看次数

何时处置CancellationTokenSource?

这个班级CancellationTokenSource是一次性的.快速浏览Reflector证明KernelEvent了(很可能)非托管资源的使用.由于CancellationTokenSource没有终结器,如果我们不处理它,GC将不会这样做.

另一方面,如果您查看MSDN文章" 托管线程中的取消"中列出的示例,则只有一个代码段处置该令牌.

在代码中处理它的正确方法是什么?

  1. using如果您不等待它,则无法将启动并行任务的代码包装起来.只有在你不等的时候取消才有意义.
  2. 当然你可以ContinueWith通过Dispose电话添加任务,但这是要走的路吗?
  3. 那些可以取消同步的可取消的PLINQ查询呢,但最后只做一些事情?我们说吧.ForAll(x => Console.Write(x))
  4. 它可以重复使用吗?是否可以将相同的令牌用于多个调用,然后将其与主机组件一起处理,让我们说UI控件?

因为它没有类似于Reset清理IsCancelRequestedToken字段的方法,所以我认为它不可重复使用,因此每次启动任务(或PLINQ查询)时都应该创建一个新任务.这是真的吗?如果是,我的问题是Dispose在这些CancellationTokenSource案例中处理的正确和建议的策略是什么?

c# parallel-extensions plinq task-parallel-library c#-4.0

142
推荐指数
7
解决办法
4万
查看次数

取消任务正在抛出异常

从我读到的有关任务的内容来看,以下代码应该取消当前正在执行的任务而不会抛出异常.我的印象是,任务取消的重点是礼貌地"要求"任务停止而不中止线程.

以下程序的输出是:

倾倒异常

[OperationCanceledException]

取消并返回最后计算的素数.

我试图在取消时避免任何例外.我怎么能做到这一点?

void Main()
{
    var cancellationToken = new CancellationTokenSource();

    var task = new Task<int>(() => {
        return CalculatePrime(cancellationToken.Token, 10000);
    }, cancellationToken.Token);

    try
    {
        task.Start();
        Thread.Sleep(100);
        cancellationToken.Cancel();
        task.Wait(cancellationToken.Token);         
    }
    catch (Exception e)
    {
        Console.WriteLine("Dumping exception");
        e.Dump();
    }
}

int CalculatePrime(CancellationToken cancelToken, object digits)
{  
    int factor; 
    int lastPrime = 0;

    int c = (int)digits;

    for (int num = 2; num < c; num++)
    { 
        bool isprime = true;
        factor = 0; 

        if (cancelToken.IsCancellationRequested)
        {
            Console.WriteLine ("Cancelling …
Run Code Online (Sandbox Code Playgroud)

c# multithreading c#-4.0

55
推荐指数
4
解决办法
6万
查看次数

将一年从4位数转换为2位数再转换回C#

我的信用卡处理器要求我从信用卡到期日发送两位数的年份.以下是我目前的处理方式:

  1. DropDownList在页面上放了一个4位数的年份.
  2. 我在DateTime字段中验证到期日期,以确保传递给CC处理器的到期日期未过期.
  3. 我将两位数的年份发送到CC处理器(根据需要).我通过DDL年份的值的子字符串来完成此操作.

是否有方法将四位数年份转换为两位数年份.我没有在物体上看到任何东西DateTime.或者我应该像我一样继续处理它?

c# datetime 2-digit-year

54
推荐指数
4
解决办法
13万
查看次数

有没有理由为什么用XmlInclude修饰的基类在序列化时仍会抛出类型未知异常?

我将简化代码以节省空间,但所呈现的内容确实说明了核心问题.

我有一个类,它有一个基类型的属性.有3个派生类可以分配给该属性.

如果我将任何派生类分配给容器并尝试序列化容器,则XmlSerializer会抛出可怕的:

"不期望类型x.使用XmlInclude或SoapInclude属性指定静态未知的类型."

但是我的基类已经用该属性修饰,所以我认为必须有一个额外的"隐藏"要求.

真正奇怪的是,默认的WCF序列化程序对此类层次结构没有任何问题.

Container类

[DataContract]
[XmlRoot(ElementName = "TRANSACTION", Namespace = Constants.Namespace)]
public class PaymentSummaryRequest : CommandRequest
{
    [DataMember]
    public PaymentSummary Summary { get; set; }

    public PaymentSummaryRequest()
    {
        Mechanism = CommandMechanism.PaymentSummary;
    }
}
Run Code Online (Sandbox Code Playgroud)

基类

[DataContract]
[XmlInclude(typeof(xPaymentSummary))]
[XmlInclude(typeof(yPaymentSummary))]
[XmlInclude(typeof(zPaymentSummary))]
[KnownType(typeof(xPaymentSummary))]
[KnownType(typeof(yPaymentSummary))]
[KnownType(typeof(zPaymentSummary))]
public abstract class PaymentSummary
{     
}
Run Code Online (Sandbox Code Playgroud)

派生类之一

[DataContract]
public class xPaymentSummary : PaymentSummary
{
}
Run Code Online (Sandbox Code Playgroud)

序列化代码

var serializer = new XmlSerializer(typeof(PaymentSummaryRequest));
serializer.Serialize(Console.Out,new PaymentSummaryRequest{Summary = new xPaymentSummary{}});
Run Code Online (Sandbox Code Playgroud)

例外

System.InvalidOperationException:生成XML文档时出错.---> System.InvalidOperationException:不期望类型为xPaymentSummary.使用XmlInclude或SoapInclude属性指定静态未知的类型.在

Microsoft.Xml.Serialization.GeneratedAssembly.XmlSerializationWriterPaymentSummaryRequest.Write13_PaymentSummary(String n,String ns,PaymentSummary o,Boolean isNullable,Boolean needType)at at …

.net c# xml-serialization

42
推荐指数
1
解决办法
5万
查看次数

C#:我是否需要处理在运行时创建的BackgroundWorker?

我通常在表单上有这样的代码:

    private void PerformLongRunningOperation()
    {
        BackgroundWorker worker = new BackgroundWorker();

        worker.DoWork += delegate
        {
            // perform long running operation here
        };

        worker.RunWorkerAsync();
    }
Run Code Online (Sandbox Code Playgroud)

这意味着我不会处理它BackgroundWorker,而如果我已经由表单设计者添加它,那么我认为它会被处理掉.

这会导致任何问题吗?声明模块级别_saveWorker,然后Dispose从表单的dispose方法调用它更正确吗?

c# dispose backgroundworker

32
推荐指数
4
解决办法
2万
查看次数

c中的fork()和pipes()

什么是fork什么pipe?任何解释为什么需要使用它们的场景将不胜感激.C forkpipeC 之间有什么区别?我们可以在C++中使用它们吗?

我需要知道这是因为我想在C++中实现一个程序,它可以访问实时视频输入,转换其格式并将其写入文件.对此最好的方法是什么?我已经使用了x264.到目前为止,我已经在文件格式上实现了转换部分.现在我必须在实时流上实现它.使用管道是个好主意吗?在另一个进程中捕获视频并将其提供给另一个进程?

c c++

31
推荐指数
2
解决办法
8万
查看次数

无法计算表达式,因为线程在无法收集垃圾的位置停止

这是错误

无法计算表达式,因为线程在无法进行垃圾收集的位置停止,可能是因为代码已经过优化.

我正在编写一个简单的控制台应用程序,第一行代码是这样的:

List<MyObjectModel> list = MyObjectModel.GetNonCompletedReturns();
Run Code Online (Sandbox Code Playgroud)

该函数的代码是:

public static List<MyObjectModel> GetNonCompletedReturns()
{
    MyObject service = new MyObject();
    List<MyObject> entities = 
                      (from recs in service.Retrieve() where select recs).ToList();

    List<MyObjectModel> models = new List<MyObjectModel>();

    foreach (MyObject entity in entities)
    {
        models.Add(BindModel(entity));
    }

    return models;
}
Run Code Online (Sandbox Code Playgroud)

如果我尝试单步执行代码,只要我回到应用程序的主界并将鼠标悬停在列表上,就会收到我显示的错误消息.

有人可以帮忙吗?

.net c# linq

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

如何从C#中的类访问表单方法和控件?

我正在研究一个C#程序,现在我有一个Form和几个类.我希望能够从我的课程中访问一些Form控件(例如a TextBox).当我尝试更改TextBox我的类中的文本时,我收到以下错误:

非静态字段,方法或属性'Project.Form1.txtLog'需要对象引用

如何访问Form1.cs其中一个类中的方法和控件?

c# winforms

25
推荐指数
3
解决办法
11万
查看次数

如何检测窗口是否会休眠或暂停?

我在用

SystemEvents.PowerModeChanged += new PowerModeChangedEventHandler(
    SystemEvents_PowerModeChanged
);
Run Code Online (Sandbox Code Playgroud)

判断Windows何时挂起.但我怎么知道它是进入休眠还是暂停?

是否有.Net或PInvoke方法来执行此操作?

c# winapi

15
推荐指数
1
解决办法
8230
查看次数