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

BackgroundAgentfromに関するこの記事を参照してくださいMSDN

于 2012-07-26T06:47:56.353 に答える
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 に答える