任务并行库中的日期格式问题

时间:2012-02-14 17:07:37

标签: c# task-parallel-library

如果我将此方法称为顺序性,

object[] ab = GetSomething(myObject);

我得到这样的日期时间格式,这没关系

enter image description here

知道我是否使用tpl来调用此方法

Task t1 = Task.Factory.StartNew(() => GetSomething(myObject));
Task t2 = Task.Factory.StartNew(() => GetSomeOtherthing(myObject));
Task.WaitAll(t1, t2);

我使用AM / PM获取此格式导致转换失败,说无效的日期时间格式,有没有办法像顺序方法一样更改日期时间格式。

enter image description here

我如何将字符串转换为日期时间

Search.Date = Convert.ToDateTime(myObject.ToDate, CultureInfo.InvariantCulture);

2 个答案:

答案 0 :(得分:1)

从/转换为字符串时始终明确指定文化。

在您的情况下,线程池线程可能具有与您期望的不同的CurrentCulture。

答案 1 :(得分:1)

如果要更改线程的文化,请创建自己的知道应用程序文化的任务计划程序。调度程序可以在执行任务之前调整文化。

这是一个示例调度程序......

class LocalizedTaskScheduler : TaskScheduler
{
    public CultureInfo Culture { get; set; }
    public CultureInfo UICulture { get; set; }

    #region Overrides of TaskScheduler

    protected override void QueueTask(Task task)
    {
        //Queue the task in the thread pool
        ThreadPool.UnsafeQueueUserWorkItem(_ =>
        {
            //Adjust the thread culture
            Thread.CurrentThread.CurrentCulture = this.Culture;
            Thread.CurrentThread.CurrentUICulture = this.UICulture;
            //Execute the task
            TryExecuteTask(task);
       }, null);
    }

    protected override bool TryExecuteTaskInline(Task task, bool taskWasPreviouslyQueued)
    {
        if (taskWasPreviouslyQueued)
        {
            return false;
        }
        // Try to run the task. 
        return base.TryExecuteTask(task);
    }

    protected override IEnumerable<Task> GetScheduledTasks()
    {
        //We have no queue
        return Enumerable.Empty<Task>();
    }

    #endregion
}