我知道跨线程访问控件需要INVOKE。不过有个疑问,如果我不修改控件的的值只是访问一下控件的属性,是否一样需要INVOKE?比如 这个访问需要吗?if(checkBox.checked == true)
{
}if(checkBox.checked == true)
{
}
{
}if(checkBox.checked == true)
{
}
解决方案 »
- 导出csv文件,如何实现用excel打开后,身份证号显示正常?
- 寻找研究过SharpDevelop项目的朋友,想请教一个问题, 代码不太能看懂.
- 动态执行C#语句的问题
- 问?为什么大家C#学的那么好?
- 用VS2005自动生成的dataset代码操作ACCESS问题.
- 弱弱的问一个关于控件访问的问题
- 重载“Open”方法未获取“12”参数,重载“SaveAs”方法未获取“11”参数
- Windows Phone7上Http调用经常出错,服务器应该是没有问题的
- 为什么提示找不到类型或空间名称?
- 如何格式化显示数字
- C# 应用程序中 缓存数据是用什么的??
- 怎样把一个DataSet转为List<T>?
我测试了,没把握因为即使我修改控件的值不用INVOKE也不崩溃不抛出异常。。
private void button1_Click(object sender, EventArgs e)
{
Thread t = new Thread(new ThreadStart(CrossThreadCall));
t.Start();
}
public void CrossThreadCall()
{
if (textBox1.InvokeRequired)
{
textBox1.Invoke(new MethodInvoker(delegate
{
textBox1.Text = "test";
textBox1.Text = "tesx";
}
));
}
else
{
textBox1.Text = "test";
}
}
我即使把线程里面的 if 部分代码全部注释掉,只执行 textBox1.Text = "test"; 结果不管是DEBUG模式还是RELEASE模式,都不抛出异常
如果要修改这一类控件的值,基本上就一个办法,dll注入。这个注入的dll本身要用C++来写。
但是如果读也要加的话,代码写起来很头痛。。比如下面这个代码:
if (checkbox1.checked==true && textbox1.text.Length==10)
{
textbox2.text = "test";
}
很不好写啊