Avatar billede deejay1984 Novice
31. marts 2015 - 21:02 Der er 5 kommentarer og
1 løsning

C# Events

Hej eksperter

Jeg er ny i C# og kigger for tiden lidt på events.
Jeg bruger udelukkende Console ikke forms endnu.
Er det muligt at lave sit eget event ligesom det indbyggede "Console.CancelKeyPress"? Altså kan fx lave et event der kører hvis man modtager en mail eller hvis man har et input fx I/O på raspberry pi eller noget tredje?

På forhånd tak
Avatar billede arne_v Ekspert
01. april 2015 - 02:15 #1
Der er ikke ret meget magi i events.

Eksempel:


using System;

namespace E
{
    public delegate void D(string msg);
    public class Demo
    {
        public event D E;
        public void M1()
        {
            E("M1 called");
        }
        public void M2()
        {
            E("M2 called");
        }
    }
    public class Program
    {
        public static void ConsolePrint(string msg)
        {
            Console.WriteLine(msg);
        }
        public static void ConsolePrintSpecial(string msg)
        {
            Console.WriteLine(">" + msg.ToUpper() + "<");
        }
        public static void Main(string[] args)
        {
            Demo o = new Demo();
            o.E += ConsolePrint;
            o.M1();
            o.M2();
            o.E += ConsolePrintSpecial;
            o.M1();
            o.M2();
            o.E -= ConsolePrint;
            o.M1();
            o.M2();
            Console.ReadKey();
        }
    }
}


Saa du kan sagtens bruge events tiul de ting du naevner, men du skal selv skrive koden som kalder event.
Avatar billede deejay1984 Novice
01. april 2015 - 20:03 #2
Hej

Jeg tænkte mere på events som "Console.CancelKeyPress".
Fx hvis programmet kører i et uendeligt loop kan "Console.CancelKeyPress" afbryde programmet udefra loopet. Kan man lave et brugerdefineret event ligesom denne som aktiveres af fx mail eller et I/O.
I dit eksempel og som mange andre eksempler på nettet kaldes eventet fra main - Jeg er mere ude efter om man kan lave et brugerdefineret event som hovedprogrammet ikke kalder som fx "Console.CancelKeyPress" og som fx en knap i forms. Her kender hovedprogrammet ikke noget til eventet eller hvornår det køres.
Jeg kan godt lave et program der kigger på fx et input hele tiden og så kalder et event når indgangen bliver høj

Håber du/I forstår hvad jeg mener.
Avatar billede arne_v Ekspert
02. april 2015 - 02:01 #3
Console.CancelKeyPress ligner faktisk mit eksempel.

Eventer er defineret som:

...
namespace System
{
    ...
    public static class Console
    {
        ...
        public static event ConsoleCancelEventHandler CancelKeyPress;
        ...

Kaldet af det er lidt anderledes da det er en funktion som er dybt begravet i styresystemet.
Avatar billede deejay1984 Novice
02. april 2015 - 11:25 #4
Okay. Så det er mere kaldet af dem jeg skulle have spurgt til.
Når du siger at funktionen til at kalde dem er dybt begravet i styresystemet vil det så sige at man ikke kan lave et brugerdefineret kald ligesom med "Console.CancelKeyPress" og som fx en knap i forms?

Bare skriv som svar så for du point..
Avatar billede arne_v Ekspert
03. april 2015 - 03:59 #5
Kangt de fleste events kaldes fra helt normal C# kode ligesom i mit foerste eksempel.

Kun nogle faa involverer native kode. Og jeg vil tro at disse tilfaelde alle er events i .NET framework klasser ikke bruger klasser.
Avatar billede arne_v Ekspert
03. april 2015 - 03:59 #6
og et svar
Avatar billede Ny bruger Nybegynder

Din løsning...

Tilladte BB-code-tags: [b]fed[/b] [i]kursiv[/i] [u]understreget[/u] Web- og emailadresser omdannes automatisk til links. Der sættes "nofollow" på alle links.

Loading billede Opret Preview

Log ind eller opret profil

Hov!

For at kunne deltage på Computerworld Eksperten skal du være logget ind.

Det er heldigvis nemt at oprette en bruger: Det tager to minutter og du kan vælge at bruge enten e-mail, Facebook eller Google som login.

Du kan også logge ind via nedenstående tjenester