我是C#事件的新手,我想触发一个事件而又不会收到跨线程错误。
using System;
using System.Timers;
public class SampleTickEvent
{
private string passStr = string.Empty;
Timer t = new Timer(1000);
public delegate void ImageEventHandler(string s);
public event ImageEventHandler ImageEventTrigger;
public void Start(string ss)
{
passStr = ss;
t.Start();
t.Elapsed += t_Elapsed;
}
public void t_Elapsed(object sender, ElapsedEventArgs eea)
{
ImageEventTrigger(passStr);
}
}
private void button1_Click(object sender, EventArgs e)
{
SampleTickEvent ste = new SampleTickEvent();
ste.Start("sample");
ste.ImageEventTrigger += ste_ImageEventTrigger;
}
private void ste_ImageEventTrigger(string s)
{
Action act = () => listBox1.Items.Add(s);
Invoke(act);
}
还有另一种方式我不会将Action act =()= ...放到listbox1.Items.Add(s)中吗?
最佳答案
而不是使用System.Timers.Timer
,而是尝试使用System.Windows.Forms.Timer
,编写该代码是为了引发UI线程上的事件。
关于c# - 没有调用的C#事件,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/8185614/