1

このコードを C# で記述しました。

using System;
using System.Collections.Generic;
using System.Linq;
using System.Text;
using System.Threading;

namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            Program re = new Program();
            re.actual();
        }
        public void actual()
        {
            Thread input = new Thread(input_m);
            Thread timing = new Thread(timing_m);
            input.Start();
            timing.Start();
        }
        public void input_m()
        {
            Console.WriteLine("Choose a number from 1-10 (You have 10 seconds): ");
            Console.ReadKey();
        }
        public void timing_m()
        {
            System.Threading.Thread.Sleep(10000);
            input.Abort();
            Console.Clear();
            Console.WriteLine("Time's up!");
            Console.ReadKey();
        }
    }
}

今、私はこのエラーを受け取ります:

Error   1   The name 'input' does not exist in the current context

「input.Abort();」について ライン。

どうにかしてこのスレッドを別のメソッドから (作成された場所からではなく) 終了できますか?

ちなみに、それらを静的にしたくないので、それを提案しないでください。

4

2 に答える 2

3

ローカル変数の代わりにクラス フィールドを使用する必要があります。

class Program
{
    private Thread input;
    public void actual()
    {
        this.input = new Thread(input_m);
        //...
    }
 }

問題自体とは関係ありませんが、複数のスレッドを使用して、コンソールから読み取るスレッドを強制的に中止しないでください。代わりに、Sleep とConsole.KeyAvailableプロパティを組み合わせて使用​​する必要があります。

于 2013-10-10T15:41:04.290 に答える
1

そのはず

    public void actual()
    {
        Thread input = new Thread(input_m);
        if(input.Join(TimeSpan.FromSeconds(10)))
                    //input complete
        else
                  //timeout
    }
于 2013-10-10T15:47:42.987 に答える