Novo

Forum kao aplikacija na telefonu

Dodajte forum na početni ekran i koristite ga kao aplikaciju, sa menijem na dnu ekrana.

Program u C# , kako tred da zna da se na nekoj formi dogodio dogadjaj "click"

  • 8 odgovora
  • 4.667 pregleda

Najnovija ↓

Re: Program u C# , kako tred da zna da se na nekoj formi dogodio dogadjaj "click" 28.05.2008. u 13:01 · pre 224 meseca #2
Ja bi ti preporucio da za brojanje koristis jedno mesto tj. jednu istu klasu. Nju mozes realizovati preko static promenljivih/metoda ili preko Singleton sablona.

Code:

    public class StaticExample
    {
        private static int _counter = 0;
        public static int Counter
        {
            get { return _counter; }
            set { _counter = value; }
        }
    }


Code:

    public class SingletonExample
    {
        private static SingletonExample _instance = new SingletonExample();

        public static SingletonExample Instance
        {
            get { return _instance; }
        }

        private SingletonExample()
        {
        }

        private int _counter = 0;
        public int Counter
        {
            get { return _counter; }
            set { _counter = value; }
        }
    }


A ovako ih koristis:
Code:

SingletonExample.Instance.Counter++;
StaticExample.Counter++;
Re: Program u C# , kako tred da zna da se na nekoj formi dogodio dogadjaj "click" 28.05.2008. u 13:17 · pre 224 meseca #3
Citat:

Nju mozes realizovati preko static promenljivih/metoda ili preko Singleton sablona.

Static promenljive nisu thread-safe ...
a pomenuti Singleton sablon ni on nije thread-safe posto nema thread-lock-ova nad objektom.
Code:

public class Singleton
{

     static Singleton instance = null;
     static readonly object padlock = new object();

     Singleton()
     {
     }

     public static Singleton Instance
     {
         get
          {
             lock (padlock) // lock varijable sa exclusive pristup za pojedinacni thread 
              {
                  if (instance == null)
                  {
                       instance = new Singleton();
                  }
                    return instance;
                }
           }
     }
      
}
Potpis
Viva lollapalooza
Re: Program u C# , kako tred da zna da se na nekoj formi dogodio dogadjaj "click" 28.05.2008. u 14:36 · pre 224 meseca #5
Cini mi se da resenje sa brojanjem klikova i nije bas najsigurnije ...
Thread mora svaki put (u nekom vremenskom intervalu)
da proverava taj brojac tj. counter u formi i na osnovu njega da detektuje klik
sto moze dovesti dovesti da ga ne detektuje u pravom trenutku (sve zavisi od intervala)

Jedino sto mi sada pada napamet je koriscenje P/Invoke funkcija iz WIN32 API -ija

Code:

using System.Runtime.InteropServices;

[StructLayout(LayoutKind.Sequential)]
public struct POINT
{
    public int X;
    public int Y;

    public POINT(int x, int y)
    {
        this.X = x;
        this.Y = y;
    }
}
[StructLayout(LayoutKind.Sequential)]
public struct MSG
{
    public IntPtr hwnd;
    public UInt32 message;
    public IntPtr wParam;
    public IntPtr lParam;
    public UInt32 time;
    public POINT pt;
}

[DllImport("user32.dll")]
[return: MarshalAs(UnmanagedType.Bool)]
static extern bool PeekMessage(out MSG lpMsg, HandleRef hWnd, uint wMsgFilterMin,
   uint wMsgFilterMax, uint wRemoveMsg);


[DllImport("user32.dll")]
static extern bool PostThreadMessage(uint idThread, uint Msg, UIntPtr wParam,
   IntPtr lParam);


// u tvom Button Click handler-u : 
const int BUTTON_CLICK = 2000 ; //poruka koju saljes tvom thread-u 
// ID treada kome hoces da saljes poruku 
int nIDthread  = thread.ManagedThreadId ; 
PostThreadMessage(nIDThread,BUTTON_CLICK,IntPtr.Zero,IntPtr.Zero) ; 

// u tvojoj Thread proceduri : 
MSG msg ; 
bool foundMessage = PeekMessage(out msg, IntPtr.Zero, 0, 0, 0); // da li imamo poruku u thread-u 
if (foundMessage) // imamo poruku u thread-u 
{
 if (msg.message == BUTTON_CLICK) // proveravamo o kojoj se poruci radi ... 
 {
     MessageBox.Show("kliknuto dugme na formi") ;  

 }

}
   


Nije bas elegantno resenje ... al mozda ti pomogne u ovom slucaju ...


Potpis
Viva lollapalooza
Re: Program u C# , kako tred da zna da se na nekoj formi dogodio dogadjaj "click" 28.05.2008. u 15:46 · pre 224 meseca #7
Citat:
Neznalica_sa_ugla: Zahvaljujem svima koji su ucestovali , posebno mi se svidja rjesenje od <<deerbeer >> ,ali da l' je moguce ne pratiti to kroz aplikaciju , nego procitati iz sami WINDOWS-a , kada i gde je kliknuo mis, to procitati u thread -u i obraditi . hvala


Mozes,al cisto sumnjam da ces moci to u .NET-u
Postoje mehanizmi na WINDOWs-u koji ti omogucavaju da pratis Mouse evente na sistemu ..
i to se radi kroz MouseHook DLL -ove ali onda moras to da odradis u C++ -u

Potpis
Viva lollapalooza
Re: Program u C# , kako tred da zna da se na nekoj formi dogodio dogadjaj "click" 29.05.2008. u 14:50 · pre 224 meseca #8

Malo je offtopic posto singlton nije prihvacen kao resenje, ali samo da napomenem da locking koji si napravio u ovom primeru ne funkcionise, da bi singlton bio thread-safe lockovi moraju da se stave na static i instance operacijama singletona, ne samo na instance get accessor. Ovime sprecavas da dva thread-a u isto vreme dodju do instance singletona ali ih nista ne sprecava da se kad jednom dodju do reference ne sudare u nekoj od metoda. Takodje generisanje instance singletona mozes da ostavis u class initializer-u i da lockovanje radis kroz lock(instance)/lock(this) u zavisnosti da li je metod staticki/instance.

Citat:
deerbeer: Static promenljive nisu thread-safe ...
a pomenuti Singleton sablon ni on nije thread-safe posto nema thread-lock-ova nad objektom.
Code:

public class Singleton
{

     static Singleton instance = null;
     static readonly object padlock = new object();
...
Potpis
Sloba je za 12 godina promenio antropološki kod srpskog naroda. On je od jednog
naroda koji je bio veseo, pomalo površan, od jednog naroda koji je bio znatiželjan, koji
je voleo da vidi, da putuje, da upozna,
od naroda koji je bio kosmopolitski napravio narod koji je namršten, mrzovoljan,
sumnjicav, zaplašen, narod koji se stalno nešto žali, kome je stalno neko kriv - Z.Đinđić
Prijavite se da biste odgovorili u ovoj temi.PrijavaRegistracija

Premeštanje teme