如何在c#中创建一个线程

时间:2012-07-26 06:10:57

标签: c# windows-phone-7.1.1

我可以为我的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();
            }
        }
    }
}

3 个答案:

答案 0 :(得分:1)

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");
    }
}

答案 1 :(得分:0)

在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
    }
}

答案 2 :(得分:0)