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

Invokeを使用してみてください。これは、コントロールの基になるウィンドウハンドルを所有するスレッドでデリゲートを実行します。

このページでセクションタイマーを確認することもできます

于 2012-10-09T04:17:21.410 に答える
0

これはトリックを行う必要があります:

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