锐英源软件
第一信赖

精通

英语

开源

擅长

开发

培训

胸怀四海 

第一信赖

当前位置::锐英源 / 英语翻译 / 简单HTTP文件下载窗体 / 用Invoke解决跨线程操作无效问题
服务方向
人工智能数据处理
人工智能培训
kaldi数据准备
小语种语音识别
语音识别标注
语音识别系统
语音识别转文字
kaldi开发技术服务
软件开发
运动控制卡上位机
机械加工软件
软件开发培训
Java 安卓移动开发
VC++
C#软件
汇编和破解
驱动开发
联系方式
固话:0371-63888850
手机:138-0381-0136
Q Q:396806883
微信:ryysoft

用Invoke解决跨线程操作无效问题

Error: "Cross-thread operation not valid: Control 'FileDownloaderForm' accessed from a thread other than the thread it was created on." in string: Error", MessageBoxButtons.OK, MessageBoxIcon.Error);"

从非控件创建线程之外线程访问控件时,报错:跨线程操作无效。字符串:"MessageBoxButtons.OK, MessageBoxIcon.Error);"
public static void Publish(Exception ex)
{
IWin32Window owner = null;
if(downloaderForm != null && downloaderForm.Visible)
owner = downloaderForm;
MessageBox.Show(downloaderForm, ex.ToString(), "Download Error", MessageBoxButtons.OK, MessageBoxIcon.Error);
downloaderForm.status = DownloadStatus.Failed;
downloaderForm.canceled = true;
downloaderForm.btnCancel.Text = "&Close";
downloaderForm.btnPause.Visible = false;
}

Use CheckForIllegalCrossThreadCalls = false;

使用CheckForIllegalCrossThreadCalls = false;

Add a class level delegate to the FileDownloadForm like this:

添加一个类级别委托给FileDownloadForm,像这样的:

delegate void PublishEventHandler(Exception ex);

On the FileDownloadForm, whenever you publish an exception you should check to see if an invoke is required:

在FileDownloadForm中,每当你发布一个异常,你应该检查是否需要invoke:
catch(Exception ex)
{
if(this.InvokeRequired)
{
this.Invoke(new PublishEventHandler(ExceptionManager.Publish),
new object[]{ex});
}
else
ExceptionManager.Publish(ex);
}

There are several other ways to implement this, but basically that'll fix it.

还有其他几种方法来实现这一点,但是这个方法基本上就能解决它。

友情链接
版权所有 Copyright(c)2004-2021 锐英源软件
公司注册号:410105000449586 豫ICP备08007559号 最佳分辨率 1024*768
地址:郑州大学北校区院(文化路97号院)内