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

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

只是我实际尝试做的一小部分。我相信这个错误是因为计时器运行在与我试图从中删除的 ObservableCollection 的 GUI 主线程不同的线程上。

4

3 回答 3

1

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

于 2012-10-09T05:59:27.507 回答
0

这应该可以解决问题:

public void timerElapsed(object sender, ElapsedEventArgs e)
{
    this.Invoke(new Action(() => listBoxItems.Remove(itemToBeRemoved)));
}
于 2012-10-09T04:33:09.357 回答
0

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

您还可以查看此页面中的部分计时器

于 2012-10-09T04:17:21.410 回答