Failure to include library

0

I am trying to include the library and call the main function of my library, as follows:

using myddl;
namespace ConsoleApplication1
{
    class Program
    {
        static void Main(string[] args)
        {
            Program.Main(args);
        }
    }
}

The class is the following:

class Program
{
    static Pool _pool = null;
    static Work _work = null;
    static uint _nonce = 0;
    static long _maxAgeTicks = 20000 * TimeSpan.TicksPerMillisecond;
    static uint _batchSize = 100000;

    static void Main(string[] args)
    {
        while (true)
        {
            try
            {
                _pool = SelectPool();
                _work = GetWork();
                while (true)
                {
                    if (_work == null || _work.Age > _maxAgeTicks)
                        _work = GetWork();

                    if (_work.FindShare(ref _nonce, _batchSize))
                    {
                        SendShare(_work.Current);
                        _work = null;
                    }
                    else
                        PrintCurrentState();
                }
            }
            catch (Exception e)
            {
                Console.WriteLine();
                Console.Write("ERROR: ");
                Console.WriteLine(e.Message);
            }
            Console.WriteLine();
            Console.Write("Hit 'Enter' to try again...");
            Console.ReadLine();
        }
    }


    private static void ClearConsole()
    {
        Console.Clear();
        Console.WriteLine("*****************************");
        Console.WriteLine("*** Minimal Bitcoin Miner ***");
        Console.WriteLine("*****************************");
        Console.WriteLine();
    }

    private static Pool SelectPool()
    {
        ClearConsole();
        Print("Chose a Mining Pool 'user:password@url:port' or leave empty to skip.");
        Console.Write("Select Pool: ");
        string login = ReadLineDefault("lithander_2:[email protected]:8332");
        return new Pool(login);
    }

    private static Work GetWork()
    {
        ClearConsole();
        Print("Requesting Work from Pool...");
        Print("Server URL: " + _pool.Url.ToString());
        Print("User: " + _pool.User);
        Print("Password: " + _pool.Password);
        return _pool.GetWork();
    }

    private static void SendShare(byte[] share)
    {
        ClearConsole();
        Print("*** Found Valid Share ***");
        Print("Share: " + Utils.ToString(_work.Current));
        Print("Nonce: " + Utils.ToString(_nonce));
        Print("Hash: " + Utils.ToString(_work.Hash));
        Print("Sending Share to Pool...");
        if (_pool.SendShare(share))
            Print("Server accepted the Share!");
        else
            Print("Server declined the Share!");

        Console.Write("Hit 'Enter' to continue...");
        Console.ReadLine();
    }

    private static DateTime _lastPrint = DateTime.Now;
    private static void PrintCurrentState()
    {
        ClearConsole();
        Print("Data: " + Utils.ToString(_work.Data));
        string current = Utils.ToString(_nonce);
        string max = Utils.ToString(uint.MaxValue);
        double progress = ((double)_nonce / uint.MaxValue) * 100;
        Print("Nonce: " + current + "/" + max + " " + progress.ToString("F2") + "%");
        Print("Hash: " + Utils.ToString(_work.Hash));
        TimeSpan span = DateTime.Now - _lastPrint;
        Print("Speed: " + (int)(((_batchSize) / 1000) / span.TotalSeconds) + "Kh/s"); 
        _lastPrint = DateTime.Now;
    }

    private static void Print(string msg)
    {
        Console.WriteLine(msg);
        Console.WriteLine();
    }

    private static string ReadLineDefault(string defaultValue)
    {
        //Allow Console.ReadLine with a default value
        string userInput = Console.ReadLine();
        Console.WriteLine();
        if (userInput == "")
            return defaultValue;
        else
            return userInput;
    }
}

I have included the DLL reference and everything still shows me this error:

  

Error: Process is terminated due to StackOverFlowException

    
asked by Perl 09.11.2016 в 11:45
source

1 answer

1

The problem is here:

class Program
    {
        static void Main(string[] args)
        {
            Program.Main(args);
        }
    }

You are calling the Main method from the Main method. This produces an infinite recursion without any output, so the stack inevitably fills up: StackOverflowException.

You should call it using the full name:

myddl.Program.Main(args);

You can do without the use since you are referencing the method completely.

    
answered by 09.11.2016 / 13:49
source