private void ThreadJob(object data) { ProgressSubItem item11 = (ProgressSubItem)data; for (int i = 0; i <= 100; i++) { Random rand = new Random(); item11.Progress = i; Thread.Sleep(rand.Next(150)); } notifyIcon1.ShowBalloonTip(10, "Download finished", "A download has finished!", ToolTipIcon.Info); } private void item11_OnProgressChange() { DownloadsView.Invalidate(); } private void button1_Click(object sender, EventArgs e) { ListViewItem item1 = new ListViewItem(); ProgressSubItem item11 = new ProgressSubItem(); item1.ImageIndex = 0; item1.SubItems.Add("baz"); item11.OnProgressChange += new ProgressSubItem.ProgressChangeHandler(item11_OnProgressChange); item11.Progress = 0; item1.SubItems.Add(item11); DownloadsView.Items.Add(item1); Thread t = new Thread(new ParameterizedThreadStart(this.ThreadJob)); t.IsBackground = true; t.Start(item11); notifyIcon1.ShowBalloonTip(10, "New Download", "A new download has started!", ToolTipIcon.Info); }