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

C# 任务并行库中的日期格式问题,c#,task-parallel-library,C#,Task Parallel Library,如果我称这种方法为顺序性 object[] ab = GetSomething(myObject); 我得到了这样的日期时间格式,这是可以的 知道我是否使用tpl来调用此方法吗 Task t1 = Task.Factory.StartNew(() => GetSomething(myObject)); Task t2 = Task.Factory.StartNew(() => GetSomeOtherthing(myObject)); Task.WaitAll(t1, t2);

如果我称这种方法为顺序性

object[] ab = GetSomething(myObject);
我得到了这样的日期时间格式,这是可以的

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

Task t1 = Task.Factory.StartNew(() => GetSomething(myObject));
Task t2 = Task.Factory.StartNew(() => GetSomeOtherthing(myObject));
Task.WaitAll(t1, t2);
我用AM/PM得到了这种格式,这导致转换失败,比如说无效的datetime格式,有没有办法像顺序方法一样更改datetime formart

如何将字符串转换为datetime

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

在从/转换为字符串时始终显式指定区域性


在您的情况下,线程池线程的当前区域性可能与您所期望的不同。

如果要更改线程的区域性,请创建您自己的任务计划程序,该程序了解应用程序区域性。调度程序可以在执行任务之前调整区域性

这是一个示例调度程序

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
}
class LocalizedTaskScheduler:TaskScheduler
{
公共文化信息文化{get;set;}
公共文化信息UICulture{get;set;}
#TaskScheduler的区域覆盖
受保护的覆盖无效队列任务(任务任务)
{
//在线程池中对任务进行排队
ThreadPool.UnsafeQueueUserWorkItem(=>
{
//调整线程区域性
Thread.CurrentThread.CurrentCulture=此.Culture;
Thread.CurrentThread.CurrentUICulture=此.UICulture;
//执行任务
TryExecuteTask(任务);
},空);
}
受保护的覆盖bool TryExecuteTaskInline(任务任务,bool任务先前排队)
{
如果(任务先前已排队)
{
返回false;
}
//尝试运行任务。
返回base.TryExecuteTask(任务);
}
受保护的重写IEnumerable GetScheduledTasks()
{
//我们没有排队
返回可枚举的.Empty();
}
#端区
}

GetSomething设置日期的代码是什么?@iam使用Convert.ToDateTime(myObject.ToDate)是字符串格式的下一个问题是
myObject
上的
ToDate
是什么?财产?它是如何实施的?它的数据类型是什么?@JesseC.Slicer是字符串类型的属性。它可能是调试器的工件,也可能是您正在某处更改线程的CultureInfo。是否有方法将threadpool threads CurrentCulture更改为特定的。@AI25我会避免这种情况
DateTime.Parse
和类似的函数都有一个接受区域性的参数。使用那个。如果您使用的库使用DateTime.Pars/DateTime.ToString而不传递特定的CultureInfo。。。我认为您需要在线程上设置CurrentCulture。