BlueRay101
BlueRay101

Reputation: 1487

C# - Multi-Threading

I've written this code in 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();
        }
    }
}

Now, I get this error:

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

It says that about the "input.Abort();" line.

Can I somehow terminate this thread from another methods (not from where it was created)?

I don't want to make them static by the way, so please don't suggest that.

Upvotes: 1

Views: 124

Answers (2)

Anirudha
Anirudha

Reputation: 32827

It should be

    public void actual()
    {
        Thread input = new Thread(input_m);
        if(input.Join(TimeSpan.FromSeconds(10)))
                    //input complete
        else
                  //timeout
    }

Upvotes: 1

Knaģis
Knaģis

Reputation: 21495

You need to use a class field instead of a local variable.

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

Unrelated to the problem itself, you should not use multiple threads and forcibly abort the one that reads from the console. Instead you should use a combination of Sleep and Console.KeyAvailable property.

Upvotes: 3

Related Questions