WinForm-跨线程访问判定

WinForm-跨线程访问判定

    • 方法=InvokeRequired
    • 方法介绍
    • 调用示例

方法=InvokeRequired

// 摘要:
//     Gets a value indicating whether the caller must call an invoke method when making
//     method calls to the control because the caller is on a different thread than
//     the one the control was created on.

// 返回结果:
//     true if the control's System.Windows.Forms.Control.Handle was created on a different
//     thread than the calling thread (indicating that you must make calls to the control
//     through an invoke method); otherwise, false.

public bool InvokeRequired {
      get; }

方法介绍

  • 获取一个值,在对控件进行方法调用时,该值指示调用者是否必须调用调用方法,因为调用者所在的线程与创建控件的线程不同。

  • 如果System.Windows.Forms.Control.Handle 的控件
    是在与调用线程不同的线程上创建的(指示您必须通过调用方法调用控件),则返回true

  • 否则,返回false。

调用示例

//非跨线程访问 直接调用即可,跨线程需要使用Invoke方法
if (!listView1.InvokeRequired)
{
     
		//声明一个列表对象 加入icon图片 下标 = index 0-2 从0开始
		//插入icon需要ImageList组件添加图片
		ListViewItem lst = new ListViewItem(" "+CurrentTime,index);
				
		//列表对象【带icon】 加入文字项
		lst.SubItems.Add("hello");

		//插入到列表的第n项,向下显示最新项。
		listView1.Items.Insert(listView1.Items.Count, lst);
}
//跨线程访问
else
{
     
	Invoke(
		new Action(
			() =>
			{
     
				ListViewItem lst = new ListViewItem(" " + CurrentTime, index);

				lst.SubItems.Add("hello");

				listView1.Items.Insert(listView1.Items.Count, lst);
			}
		));
}

你可能感兴趣的:(C#)