问高手个问题:
如果要在非UI主线程更新UI的话,必须使用Invoke方法调用委托更新UI。可是为何在子线程中调用PictureBox更新代码:
Box.Image = bitmap;
Box.Invalidate();
没有引发异常?而调用Box.Show()却会引发异常。求原因,求详情。
如果要在非UI主线程更新UI的话,必须使用Invoke方法调用委托更新UI。可是为何在子线程中调用PictureBox更新代码:
Box.Image = bitmap;
Box.Invalidate();
没有引发异常?而调用Box.Show()却会引发异常。求原因,求详情。
解决方案 »
- FastReport直接读取datagridview中显示的数据 打印出来,怎么实现?求代码!
- 。。写了个windows service,结果内存泄露(应该是),有什么工具可以监测他?。。
- 基于服务端的文件传输,高手请进
- c#怎样获取当前系统默认打印机的首选纸张格式大小(长和宽)
- 奇怪有高手帮忙解释 在listbox 里设置 多行字符串 其中有两行字符串 只有大小写区分 当我将小写的一行移到大写那行时小写变成了大写
- 没搞过winform开发,请给个例子
- 关于存储过程
- 错误:foreach语句无法用在方法组上,您是要调用方法组吗?
- Canvas面板如何设置边框颜色?
- 求DirectShow的中文开发帮助文档,给小弟一份,重谢!
- c#更改combobox的外观
- 自己写的公共类放在什么位置最好
http://download.csdn.net/source/2976570
{
//写代码
}));
delegate void ShetShowStatus(bool bIsShow);ProgressBar PBSavePrjMsg = new ProgressBar();private void SetMsgSHowStatus(bool bIsShow)
{
if (this.PBSavePrjMsg.InvokeRequired)
{
ShetShowStatusd = new ShetShowStatus(SetMsgSHowStatus);
this.Invoke(d, new object[] { bIsShow });
}
else
{
PBSavePrjMsg.Visible = bIsShow;
}
}
public void Run()
{
new Thread(new ThreadStart(Test)).Start();
}
public Test()
{
//以下代码,在子线程中运行不会报错。并不需要使用Invoke,这是为什么?
box.Image=bitmap;//更新一张图
box.Invalidate(); //刷新
}
box.Invalidate(); //刷新跟刷新text比较,微软使用的是非托管方式实现的刷新Box上的图片(因为流专用非托管资源),所以,你不需要Invoke或这BeginInvoke
调用 Invalidate 方法并不强制同步绘制;若要强制同步绘制,请在调用 Invalidate 方法之后调用 Update 方法。 在不带参数的情况下调用此方法时,会将整个工作区添加到更新区域。
更新图像的操作并不是在你的线程里完成的