======================================================================
public partial class MainForm : Form
{
public MainForm()
{
InitializeComponent();
}
void Button1Click(object sender, EventArgs e)
{
MessageBox.Show("Buton 1 Tetiklendi :D");
}
void Button2Click(object sender, EventArgs e)
{
// ----Önemli Olan Nokta----- Yani Buton1'in tetiklendiği yer!!
Button1Click(new object(),new EventArgs());
// ----Önemli Olan Nokta----- Yani Buton1'in tetiklendiği yer!!
}
}
======================================================================
Yukarıdaki örnekği incelediğimizde --Buton1-- Metodunu tetiliyor.Standart tetikleme yöntim hepimiz biliyoruz.Yalnız şöylebir nokta var, programda threading(yani kanallama) yöntimi kullandığınızda program normal olarak hata verecektir.Çünkü programa çalışma esnasında müdahale ediyorsunuz. Bunu çömek için iki yöntem var.
1.si Sınıfın(form-buton vs. hangi sınıfı kıllanıyorsanız ) Checkforillegalcrossthreadcalls=false; properties'ini false yapmak.Bu önerilmez.Neden diye sorarsanız sınıfa dışarıdan illegal bir müdahaleyi aktifleştirmiş olursunuz. 2.si ise Sınıfın Invoke() metodunu kullanırsınız. Bu güvenilir ve sağlam olanı.Aşağıdaki örneği inceleyin.
======================================================================
Örnek 2---->
public partial class MainForm : Form
{
public MainForm()
{
InitializeComponent();
}
void Button1Click(object sender, EventArgs e)
{
MessageBox.Show("Buton 1 Tetiklendi :D");
}
void Button2Click(object sender, EventArgs e)
{
// ----Önemli Olan Nokta----- Yani Buton1'in tetiklendiği yer!!
button1.Invoke(new EventHandler(Button1Click));
// ----Önemli Olan Nokta----- Yani Buton1'in tetiklendiği yer!!
}
}
Yukarıdaki örnekte direkt olarak metodu tetikledik.Yani herhangibir obje veyahut event args oluşrurmadık.Kendiniz event args veya obje oluşturmak istiyorsanız 3. örneği kullanın.
======================================================================
Örnek 3---->
public partial class MainForm : Form
{
public MainForm()
{
InitializeComponent();
}
void Button1Click(object sender, EventArgs e)
{
MessageBox.Show("Buton 1 Tetiklendi :D");
}
void Button2Click(object sender, EventArgs e)
{
object obj=new Button();//kendimiz bir obje oluşturuyoruz istersekte dolduruyoruz.
EventArgs f=new EventArgs();//kendimiz bir eventargs oluşturuyoruz
// ----Önemli Olan Nokta----- Yani Buton1'in tetiklendiği yer!!
button1.Invoke(new EventHandler(Button1Click),new object[]{obj, f});
// ----Önemli Olan Nokta----- Yani Buton1'in tetiklendiği yer!!
}
}
======================================================================
illaki butonu veya sınıfın delegelerini kullanmak gibi bi zorunluluğunuz yok aşağıya bir örnek daha vereyim buda bi client serve uygulamasının bir kısmı.
private void ReceiveMessages()
{
if (ConResponse[0] == '1')
this.Invoke(new UpdateLogCallback(this.UpdateLog), new object[] { "Connected Successfully!" });
}
private void UpdateLog(string strMessage)
{
txtLog.AppendText(strMessage + "\r\n");
}
Kolay gele :D
Emeğine sağlık kardeşim sade ve güzel anlatım
YanıtlaSilEllerine sağlık abi.Gayet yeterli
YanıtlaSil