2

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

3 回答 3

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");
    }
}
于 2012-07-26T06:15:08.600 回答
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
    }
}
于 2012-07-26T06:16:40.857 回答
0

请参阅这篇关于BackgroundAgent来自的文章MSDN

于 2012-07-26T06:47:56.353 回答