从Timer内部的ListBox中删除

时间:2012-10-09 04:08:02

标签: c# multithreading

ObservableCollection<String> listBoxItems = new ObservableCollection<String>();
scheduledRecordingListBox.ItemsSource = listBoxItems;

public void timerElapsed(object sender, ElapsedEventArgs e)
{
    listBoxItems.Remove(itemToBeRemoved);
}

只是我正在尝试做的事情的片段。我认为错误是由于计时器运行在与我正在尝试删除的ObservableCollection的GUI主线程不同的线程上的。

3 个答案:

答案 0 :(得分:1)

如果您使用的是WinForms,那么只需使用System.Windows.Timer类。它的Tick事件在UI线程上自动执行。

答案 1 :(得分:0)

尝试使用Invoke它在拥有控件底层窗口句柄的线程上执行委托。

您还可以查看此page

中的部分计时器

答案 2 :(得分:0)

这应该做的伎俩:

public void timerElapsed(object sender, ElapsedEventArgs e)
{
    this.Invoke(new Action(() => listBoxItems.Remove(itemToBeRemoved)));
}