如何在c#中创建线程



我可以为我的Windows Phone应用程序创建一个从c#中的线程类继承的类吗。

例如:如果我的类名是"MyClass",我想以new MyClass().Start(); 启动线程

类似于下面的Java示例

public class TagIndexer 
{
    private static class Task 
    {
        private String docId;
        private String tags;
        private String extension;
        public Task(String docId, String tags, String extension) 
        {
            this.docId = docId;
            this.tags = tags;
            this.extension = extension;
        }
    }
    private static final LinkedList<Task> queue = new LinkedList<Task>();
    private static boolean isWorking = false;
    private static class TaskRunner extends Thread 
    {
        @Override
        public void run() 
        {
            while (true) 
            {
                Task task;
                synchronized (queue) 
                {
                    task = queue.poll();
                    if (null == task) 
                    {
                        isWorking = false;
                        break;
                    }
                    isWorking = true;
                }
                /*
                 * PROCESSING CODE
                 */
            }
        }
    }
    public static void addDocument(int docId, String tags, String extension) 
    {
        Task task = new Task(Integer.toString(docId), tags, extension);
        synchronized (queue) 
        {
            queue.add(task);
            if (!isWorking) 
            {
                new TaskRunner().start();
            }
        }
    }
}
new MyClazz().Start();

-

public abstract class MyThread
{
    public abstract void Run();
    public void Start()
    {
        new Thread(Run).Start();
    }
}
public class MyClazz : MyThread
{
    public override void Run()
    {
        Console.WriteLine("Hello World");
    }
}

在Windows Phone上,Thread是一个密封类,因此不能从中继承。如果你想保留基于任务的方法,你可以创建一个类来包装线程实例。类似于:

public abstract class Task
{
    protected Thread InternalThread { get; set; }
    protected abstract void Run();
    public void Start()
    {
        this.InternalThread = new Thread(this.Run);
        this.InternalThread.Start();    
    }
}

当然,这只是一个例子。如果多次调用Start方法,则必须添加一些同步机制以防止其创建多个线程。

然后您可以继承它来创建自定义任务:

public class MyTask : Task
{
    protected override void Run()
    {
        // Do something
    }
}

请参阅MSDN中关于BackgroundAgent的文章:

  • Windows Phone的后台代理概述

最新更新