System.Timers.Timerのようにタスク実行する関数の中でFormのUI(例えばTextBox)などを操作するにはInvokeメソッドを使ってdelegateを実行する必要がある。
例
タイマーが実行される度にTextBox値を1ずつ増やしていく
int counter = 0;
public void CallbackFunc(Object source, ElapsedEventArgs e){
counter++;
textbox1.Invoke((MethodInvoker) delegate {
textbox1.Text = counter.ToString();
});
}
逆にTextBoxのTextプロパティの値を受け取りたい場合は、delegateの戻り値を使うのではなく、直接delegateの中で受け取れば良い。
public void CallbackFunc(Object source, ElapsedEventArgs e){
string txt="";
textbox1.Invoke((MethodInvoker) delegate {
txt = textbox1.Text;
});
}