terça-feira, 29 de dezembro de 2015

Debugando Windows Services no Visual Studio


Na classe "Program", alterar para que fique como o exemplo abaixo

    static class Program
    {
        /// <summary>
        /// The main entry point for the application.
        /// </summary>
        static void Main()
        {
            #if (!DEBUG)
            ServiceBase[] ServicesToRun;
            ServicesToRun = new ServiceBase[]
                    {
                           new Service1()
                    };
            ServiceBase.Run(ServicesToRun);

            #else
            
            Service1 service = new Service1();

            // Chamada do seu método para Debug.

            service.NomedoMetodo();

            // Não esquecer de colocar um breakpoint para o ponto de parada do seu código.

            System.Threading.Thread.Sleep(System.Threading.Timeout.Infinite);
#endif

        }
    }

 Após isso, será possível executar um debug sem a necessidade de instalar o serviço.

terça-feira, 22 de dezembro de 2015

Removendo caracteres especiais com regular expression (regex) C#

Uma maneira para remover caracteres especiais de maneira rápida é utilizando o seguinte método:


public static string RemoverCharEspecial(string valor)
        {
            return Regex.Replace(valor, @"[^0-9a-zA-Z]+", "");

        }

Valida CPF C#

Código para validar CPF

using System;
namespace Validacao
{
       /// <summary>
       /// Realiza a validação do CPF
       /// </summary>
       public static class ValidaCPF
       {
            public static bool IsCpf(string cpf)
           {
             int[] multiplicador1 = new int[9] { 10, 9, 8, 7, 6, 5, 4, 3, 2 };
             int[] multiplicador2 = new int[10] { 11, 10, 9, 8, 7, 6, 5, 4, 3, 2 };
             string tempCpf;
             string digito;
             int soma;
             int resto;
             cpf = cpf.Trim();
             cpf = cpf.Replace(".", "").Replace("-", "");
             if (cpf.Length != 11)
                return false;
             tempCpf = cpf.Substring(0, 9);
             soma = 0;

             for(int i=0; i<9; i++)
                 soma += int.Parse(tempCpf[i].ToString()) * multiplicador1[i];
             resto = soma % 11;
             if ( resto < 2 )
                 resto = 0;
             else
                resto = 11 - resto;
             digito = resto.ToString();
             tempCpf = tempCpf + digito;
             soma = 0;
             for(int i=0; i<10; i++)
                 soma += int.Parse(tempCpf[i].ToString()) * multiplicador2[i];
             resto = soma % 11;
             if (resto < 2)
                resto = 0;
             else
                resto = 11 - resto;
             digito = digito + resto.ToString();
             return cpf.EndsWith(digito);
             }
       }
}


Validar CNPJ C#

using System;
using System.Collections.Generic;
using System.Linq;
using System.Web;
using System.EnterpriseServices;
using System.Reflection;
using System.ComponentModel;
using System.EnterpriseServices;


namespace XXXXX
{
    public class Util
    {
        /// <summary>
        /// Validando CNPJ
        /// </summary>
        /// <param name="cnpj">Envia como parâmetro o CNPJ da Oficina</param>
        /// <returns>Retorna true para cnpj válido, false para cnpj inválido</returns>
        public bool IsCnpj(string cnpj)
        {
            int[] multiplicador1 = new int[12] { 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2 };
            int[] multiplicador2 = new int[13] { 6, 5, 4, 3, 2, 9, 8, 7, 6, 5, 4, 3, 2 };
            int soma;
            int resto;
            string digito;
            string tempCnpj;
            cnpj = cnpj.Trim();
            cnpj = cnpj.Replace(".", "").Replace("-", "").Replace("/", "");
            if (cnpj.Length != 14)
                return false;
            tempCnpj = cnpj.Substring(0, 12);
            soma = 0;
            for (int i = 0; i < 12; i++)
                soma += int.Parse(tempCnpj[i].ToString()) * multiplicador1[i];
            resto = (soma % 11);
            if (resto < 2)
                resto = 0;
            else
                resto = 11 - resto;
            digito = resto.ToString();
            tempCnpj = tempCnpj + digito;
            soma = 0;
            for (int i = 0; i < 13; i++)
                soma += int.Parse(tempCnpj[i].ToString()) * multiplicador2[i];
            resto = (soma % 11);
            if (resto < 2)
                resto = 0;
            else
                resto = 11 - resto;
            digito = digito + resto.ToString();
            return cnpj.EndsWith(digito);

        }

Implementação de Thread e Multithreadding C# Parte 1

Imagine se seu computador tenha apenas uma unidade central de processamento (CPU) e é capaz de executar apenas uma tarefa por vez. Agora imagine se nesse cenário a cpu tivesse que executar uma tarefa de longa duração.
Embora essa operação esteja sendo executadas, todas outras operações estaria em estado de pausa. As coisa ficam piores se essa tarefa de longa duração conter um erro e nunca terminar, a máquina ficaria travada, o resto das operações ficariam inutilizadas e a solução seria reiniciar a máquina.
Para solucionar esse problema, foi criado o conceito de Thread. Nas versões atuais do Windows , cada aplicativo é executado em seu próprio processo e isola uma aplicação da outra e garantindo os demais processos não sejam afetados por possível em um outro processo.

Utilizando a classe Thread

A classe thread é encontrada no namespace System.Threading
Permite que você crie novas Theads, gerencie prioridade e obtenha seu status.
A classe thread não é algo que você deva usar em sua aplicação a não ser tenha necessidades especiais, entretanto ao usar a classe thread você tem controle a todas as opções de configuração.

Abaixo um exemplo de como utilizar a classe threading, faremos um exemplo fazendo com que o thread principal seja executado no primeiro laço espere o método “Método Thread” ser finalizado e continue a execução.


Resultado:
 
Veja que não ocorreu o comportamento que esperávamos, para que ocorra, devemos inserir o método “Join()”

Definição segundo o MSDN
“O método Join() serve para bloquear o segmento de chamada até que um segmento termina, para continuar a executar COM padrão e o bombeamento de SendMessage.”

 

Resultado:

Podemos também utilizar o método Thread.Sleep() para determinar o tempo de espera para o retorno da thread principal após a outra ser finalizada.


Resultado:

Referências: https://msdn.microsoft.com/pt-br/library/95hbf2ta(v=vs.110).aspx


Diferença entre passagens de parâmetros tipo valor e tipo referencia




 Uma variável de tipo de valor contém dados desse tipo e representam dados simples como, por exemplo, Int, string, bool.

Declaração de uma variável:
Na imagem abaixo temos 2 exemplos de declaração de variáveis  tipo de valor



Uma variável de tipo de referência contém o endereço da localização na memória em que os dados estão armazenados, esses dados referem-se a objetos aos quais podem conter vários dados individuais.

Passagem de valores

Primeiro passo, vamos criar um projeto console e declarar duas variáveis como mostrado na imagem abaixo:

 

Após criada as variáveis, criaremos dois métodos “PorValor ” e “PorReferencia”


  
Vamos criar uma chamada para os métodos passando como referência as duas variáveis criadas anteriormente e depois disso imprimir o resultado na tela.



Note que ao passar o valor por referência foi utilizada a palavra chave REF que faz com que o argumento seja passado por referência e não por valor.


O efeito de passar como referência é que qualquer alteração feita no parâmetro do método chamado, será refletido no método chamador.






Como utilizar Description de uma classe Enum C#

Criar uma classe Enum como a de baixo

using System.ComponentModel;
using System;
using System.Reflection;  

namespace XXXXXXX.yyy
{
    public enum NomeDaClasseEnum
    {
        [Description("String bla bla bla.")]
        blablabla = 1,
       
    }
}


public static class EnumHelper
{
    /// <summary>
    /// Retrieve the description on the enum, e.g.
    /// [Description("String bla bla bla ")]
    /// blablabla = 1,
    /// Then when you pass in the enum, it will retrieve the description
    /// </summary>
    /// <param name="en">The Enumeration</param>
    /// <returns>A string representing the friendly name</returns>
    public static string GetDescription(Enum en)
    {
        Type type = en.GetType();

        MemberInfo[] memInfo = type.GetMember(en.ToString());

        if (memInfo != null && memInfo.Length > 0)
        {
object[] attrs = memInfo[0].GetCustomAttributes(typeof(DescriptionAttribute), false);

            if (attrs != null && attrs.Length > 0)
            {
                return ((DescriptionAttribute)attrs[0]).Description;
            }
        }

        return en.ToString();
    }

}

A descrição será através da linha
String exemplo = EnumHelper.GetDescription(NomeDaClasseEnum.blablabla)


segunda-feira, 21 de dezembro de 2015

Como corrigir erro <%@ Register Assembly="AjaxControlToolkit" Namespace="AjaxControlToolkit" TagPrefix="cc1" %>

Ao abrir uma página e se deparar com a tela com o seguinte erro:


Depois de vários testes e pesquisa achei uma maneira simples e rápida para resolver isso
no Web config inclua o seguinte código na tag <assembly>
<add assembly="AjaxControlToolkit, Version=3.0.20820.16598, Culture=neutral, PublicKeyToken=28f01b0e84b6d53e"/>   
pronto, a página voltará a funcionar