C# 子线程操作主窗体控件的解决方法
2009-07-31 10:27
453 查看
初试C#,结果发现子线程调用主窗体空间,在C#中会抛出异常,子线程和运行窗体的线程在不同的空间,这样的跨线程调用C#编译器视为危险调用方法,所以抛出异常。
使用委托和Invoke方法。
private delegate void addStatusUnSafe(string status);
public void addStatus(string status)
{
DateTime dt = System.DateTime.Now;
string now = "[" + dt.ToShortDateString() + " " + dt.ToShortTimeString() + "]";
if (this.listBoxStatus.InvokeRequired)
{
addStatusUnSafe aus = new addStatusUnSafe(addStatus);
this.listBoxStatus.Invoke(aus, new string[] { status });
}
else
{
this.listBoxStatus.Items.Add(now + status);
if (this.listBoxStatus.Items.Count > 0)
{
this.listBoxStatus.SelectedIndex = this.listBoxStatus.Items.Count - 1;
}
}
}
使用委托和Invoke方法。
private delegate void addStatusUnSafe(string status);
public void addStatus(string status)
{
DateTime dt = System.DateTime.Now;
string now = "[" + dt.ToShortDateString() + " " + dt.ToShortTimeString() + "]";
if (this.listBoxStatus.InvokeRequired)
{
addStatusUnSafe aus = new addStatusUnSafe(addStatus);
this.listBoxStatus.Invoke(aus, new string[] { status });
}
else
{
this.listBoxStatus.Items.Add(now + status);
if (this.listBoxStatus.Items.Count > 0)
{
this.listBoxStatus.SelectedIndex = this.listBoxStatus.Items.Count - 1;
}
}
}
相关文章推荐
- C# 子线程操作主窗体控件的解决方法
- C#中子线程操作主线程中窗体上控件的方法
- C# 线程操作 出现“从不是创建控件lstUser的线程访问它”错误的解决方法
- C#中子线程操作主线程中窗体上控件的方法
- C#中子线程操作主线程中窗体上控件的方法
- C#中子线程操作主线程中窗体上控件的方法
- C# 在自定义线程中采用系统委托方式操作主窗体线程控件的方法
- C# 引发“线程间操作无效: 从不是创建控件“XXX”的线程访问它” 解决方法
- C#中子线程操作主线程中窗体上控件的方法
- C# 线程间操作无效: 从不是创建控件“”的线程访问它~~~的解决方法~
- c# 线程间操作无效: 从不是创建控件“textBox1”的线程访问它。解决方法
- C#中子线程操作主线程中窗体上控件的方法
- 线程间操作无效: 从不是创建控件“”的线程访问它~~~的解决方法~【转】
- 线程间操作无效: 从不是创建控件“pbarc”的线程访问它 解决方法
- c# 线程间操作无效: 从不是创建控件“”的线程访问它,用托管来解决
- 线程间操作无效: 从不是创建控件“”的线程访问它~~~的解决方法~ 线程间操作无效: 从不是创建控件“Control Name'”的线程访问它问题的解决方案及原理分析
- 线程间操作无效: 从不是创建控件“”的线程访问它~~~的解决方法~
- C#一个线程操作另一个线程的控件的方法(转)
- c# 控件,线程间操作(设置主窗体控件数据)
- 在C#中子线程如何操作主线程中窗体上控件