protected void OnDataUpdate(object source, CryptoIdDataUpdateEventArgs args)
 {
     if (DataUpdate != null)
     {
         DataUpdate.Invoke(source, args);
     }
 }
        protected override async Task RunQuery()
        {
            CryptoIdDataUpdateEventArgs args = new CryptoIdDataUpdateEventArgs();
            await Task.Run(() =>
            {
                lock (QueryLock)
                {
                    args.BlockHeight           = SendApiRequest <int>("getblockcount");
                    args.CirculatingCoinsCount = SendApiRequest <decimal>("circulating");
                    args.Difficulty            = SendApiRequest <decimal>("getdifficulty");
                    args.Hashrate   = SendApiRequest <decimal>("hashrate");
                    args.Nethashps  = SendApiRequest <decimal>("nethashps");
                    args.Netmhashps = SendApiRequest <decimal>("nethashps");
                    args.Totalbc    = SendApiRequest <decimal>("totalbc");
                    args.Totalcoins = SendApiRequest <decimal>("totalcoins");
                }
            });

            OnDataUpdate(this, args);
        }