设置的ApartmentState的任务 [英] Set ApartmentState on a Task

查看:728
本文介绍了设置的ApartmentState的任务的处理方法,对大家解决问题具有一定的参考价值,需要的朋友们下面随着小编来一起学习吧!

问题描述

我想设置单元状态上的任务,但看到这样的选项。有没有办法做到这一点使用任务?

 的for(int i = 0; I< zom.Count;我++)
{
     任务T = Task.Factory.StartNew(ZOM [I] .Process);
     t.Wait();
}


解决方案

StartNew 失败,你只是做自己:

 公共静态任务< T> StartSTATask< T>(Func键< T> FUNC)
{
    VAR TCS =新TaskCompletionSource< T>();
    线程线程=新主题(()=>
    {
        尝试
        {
            tcs.SetResult(FUNC());
        }
        赶上(例外五)
        {
            tcs.SetException(E);
        }
    });
    thread.SetApartmentState(ApartmentState.STA);
    thread.Start();
    返回tcs.Task;
}

(您可以创建一个工作这看起来几乎相同,或添加重载一些不同的选项 StartNew 有。)

I am trying to set the apartment state on a task but see no option in doing this. Is there a way to do this using a Task?

for (int i = 0; i < zom.Count; i++)
{
     Task t = Task.Factory.StartNew(zom[i].Process);
     t.Wait();
}

解决方案

When StartNew fails you just do it yourself:

public static Task<T> StartSTATask<T>(Func<T> func)
{
    var tcs = new TaskCompletionSource<T>();
    Thread thread = new Thread(() =>
    {
        try
        {
            tcs.SetResult(func());
        }
        catch (Exception e)
        {
            tcs.SetException(e);
        }
    });
    thread.SetApartmentState(ApartmentState.STA);
    thread.Start();
    return tcs.Task;
}

(You can create one for Task that will look almost identical, or add overloads for some of the various options that StartNew has.)

这篇关于设置的ApartmentState的任务的文章就介绍到这了,希望我们推荐的答案对大家有所帮助,也希望大家多多支持IT屋!

查看全文
登录 关闭
扫码关注1秒登录
发送“验证码”获取 | 15天全站免登陆