2

いくつかのエントリを持つ C# ListView、最初のエントリを削除する Methode、およびこのメソッドを呼び出す Timer があります。私の問題は、タイマーがうまく機能し(MessageBoxを呼び出してこれを確認した)、removeメソッドもうまく機能しないことです(タイマーではなくボタンでこのメソッドを呼び出すことでこれを確認します)。しかし、タイマーはまだリストビューからアイテムを削除できません。

私のコード:

    void Button1Click(object sender, EventArgs e)
    {
        removeItems();
    }

    private void timer_Tick(object sender, System.Timers.ElapsedEventArgs e)
    {
        removeItems();      
    }

    void removeItems()
    {
        MessageBox.Show("Hello from the removeMethod");
        listViewTeam.Items.RemoveAt(0);
    }

removeItems(); の両方の呼び出し。messageBox を表示させますが、Button だけが listView の最初のアイテムも削除させます。

誰かがタイマーで最初のアイテムを削除する方法を教えてもらえますか?

4

7 に答える 7

0

delegateバックグラウンド スレッドから UI コントロールと安全にやり取りするには、 を使用する必要があります (これは、 を実装するときに実際Timerに行っていることです)。

void Button1Click(object sender, EventArgs e)
{
    removeItems();
}

private void timer_Tick(object sender, System.Timers.ElapsedEventArgs e)
{
    removeItems();      
}

void removeItems()
{
    MessageBox.Show("Hello from the removeMethod");
    RemoveListViewItem(0);
}

public delegate void InvokeRemoveListViewItem(Int32 ItemIndex);
public void RemoveListViewItem(Int32 ItemIndex)
{
    if (InvokeRequired)
    {
        try { Invoke(new InvokeRemoveListViewItem(RemoveListViewItem), new Object[] { ItemIndex }); }
        catch (Exception)
        {
            //react to the exception you've caught
        }
    }

    listView.RemoveAt(ItemIndex);
}
于 2013-06-13T11:04:05.430 に答える
0

SLC が言ったように、BeginInvoke を使用する必要があります。個人的にはこのように解決しました

  public AddListItem myDelegate;
于 2013-06-13T11:08:07.647 に答える
0
                               Windows.Forms       System.Timers         System.Threading 
Timer event runs on what thread?    UI thread      UI or worker thread   Worker thread 
Instances are thread safe?          No             Yes                   No 
Familiar/intuitive object model?    Yes            Yes                   No 
Requires Windows Forms?             Yes            No                    No 
Metronome-quality beat?             No             Yes*                  Yes* 
Timer event supports state object?  No             No                    Yes 
Initial timer event schedulable?    No             No                    Yes 
Class supports inheritance?         Yes            Yes                   No

* Depending on the availability of system resources (for example, worker threads) 
于 2015-09-11T12:57:58.940 に答える