线程间操作无效: 从不是创建控件“strAddress”的线程访问它,这样的问题如何解决?
解决方案 »
- 分不多,求高手指点如何获得网页弹出的confirm()框框?谢谢!
- [求助]如何把checkbox作为combobox的items进行添加?
- 控制多台打印机同时打印同一文档
- C# winform 通过Graphics绘画出来的画,怎么改透明度呀
- C# 做非规则的窗体
- 如何在表格中动态插入一行?
- MDI窗体中的属性BackgroudImage设置了图片,我想设为拉伸怎么搞?
- 由于运算处理量较大,导致窗口处于假死状态,如何解决这样的问题?
- 没有作过ASP.NET程序,现在想练习一下。怎么配置呢?
- 动态创建控件
- visual studio 编写 c# 程序时没有自动报错
- ListView问题《《?》》
1.可以在主线程中添加一个语句CheckForillegalCrossThreadCalls = false;
2.用委托,如下在主线程中调用test()方法就行了。private delegate void SetTextCallbakc();
//主线程中调用方法
public void test()
{
SetTextCallbakc stcb = new SetTextCallbakc(callbakc);
Invoke(stcb);
}//具体要调用的方面
public void callbakc()
{}
否则即使调试通过也不能保证运行时不出问题.
看下这篇搜SynchronizationContext相关
在窗体加载事件里:
System.Windows.Forms.Form.CheckForIllegalCrossThreadCalls = false;正规的方法是:用委托,把子线程对控件的访问委托给主线程。参考2楼。
private void OperateStrAddress()
{
if(strAddress.InvokeRequired)
{
strAddress.Invoke(new MethodInvoker(OperateStrAddress));
}
else
{
...//Your code here
}
}