Atualmente, estou criando um aplicativo em C # usando o Visual Studio. Quero criar um código para que, quando uma variável tiver o valor 1, um determinado trecho de código seja executado. Eu sei que posso usar uma instrução if, mas o problema é que o valor será alterado em um processo assíncrono, portanto, tecnicamente, a instrução if pode ser ignorada antes que o valor seja alterado.
É possível criar um manipulador de eventos para que, quando o valor da variável muda, um evento seja disparado? Se sim, como posso fazer isso?
É completamente possível que eu pudesse ter entendido mal como uma instrução if funciona! Qualquer ajuda seria muito apreciada.
c#
visual-studio
silverlight
windows-phone-7
event-handling
James Mundy
fonte
fonte
Respostas:
Parece-me que você deseja criar uma propriedade.
Isso permite que você execute algum código sempre que o valor da propriedade for alterado. Você pode criar um evento aqui, se quiser.
fonte
Você pode usar um configurador de propriedade para gerar um evento sempre que o valor de um campo for alterado.
Você pode ter seu próprio delegado EventHandler ou pode usar o famoso delegado System.EventHandler.
Normalmente, há um padrão para isso:
Aqui está um exemplo
A vantagem dessa abordagem é que você permite que qualquer outra classe que deseja herdar de sua classe altere o comportamento, se necessário.
Se você quiser capturar um evento em um thread diferente que está sendo gerado, deve ter cuidado para não alterar o estado dos objetos que são definidos em outro thread, o que fará com que uma exceção de thread cruzado seja lançada. Para evitar isso, você pode usar um método Invoke no objeto cujo estado deseja alterar para ter certeza de que a mudança está acontecendo no mesmo segmento em que o evento foi gerado ou no caso de estar lidando com um Windows Form, pode usar um BackgourndWorker para fazer coisas em um thread paralelo de forma fácil e agradável.
fonte
A estrutura .NET realmente fornece uma interface que você pode usar para notificar os assinantes quando uma propriedade for alterada: System.ComponentModel.INotifyPropertyChanged. Esta interface possui um evento PropertyChanged. Geralmente é usado no WPF para vinculação, mas descobri que é útil em camadas de negócios como uma forma de padronizar a notificação de alteração de propriedade.
Em termos de segurança de thread, eu colocaria um travamento no setter para que você não entre em nenhuma condição de corrida.
Aqui estão meus pensamentos sobre o código :):
Espero que isso seja útil :)
fonte
apenas use uma propriedade
fonte
você pode usar uma classe genérica:
e será capaz de fazer o seguinte:
resultado:
fonte