public partial class WebData_Import : Form
{
//声明用于访问主界面的委托类型
public delegate void deleGetOrderdata(string info);
//声明访问主界面委托类型的变量
public deleGetOrderdata OptGetOrderData;
int CompanyID = ;
public WebData_Import()
{
InitializeComponent();
cmbCompany.Items.Insert(, "公司001");
cmbCompany.Items.Insert(, "公司002");
cmbCompany.SelectedIndex = ;
//实例化委托
OptGetOrderData = new deleGetOrderdata(ShowOperationInfo);
} private void button1_Click(object sender, EventArgs e)
{
txtOperationInfo.Text = "";
switch (cmbCompany.SelectedIndex)
{
case :
CompanyID = ;
break;
case :
CompanyID = ;
break;
}
//执行获取订单数据线程
Thread GetOrderDataThread = new Thread(new ThreadStart(ExecuteGetOrderData));
GetOrderDataThread.Start();
} /// <summary>
/// 访问主界面的方法
/// </summary>
/// <param name="ShowInfo"></param>
private void ShowOperationInfo(string ShowInfo)
{
txtOperationInfo.Text += ShowInfo + "\r\n";
} private void ExecuteGetOrderData()
{
DataTable GetOrderData = new DataTable();
//使用BeginInvoke从子线程访问主界面,传入访问主界面的方法和参数
this.BeginInvoke(OptGetOrderData, "1、导入数据操作开始");
this.BeginInvoke(OptGetOrderData, "\r\n2、正在获取数据,请稍后...");
try
{
GetOrderData = GetOrderTable(CompanyID, Convert.ToDateTime(Sdate.Text), Convert.ToDateTime(Edate.Text));
if (GetOrderData == null)
{
throw new Exception("没有从远程服务获取到任何数据");
}
this.BeginInvoke(OptGetOrderData, "\r\n3、已获取" + GetOrderData.Rows.Count + "条数据,正在执行往数据库插入操作...");
SQLDBHELPER help = new SQLDBHELPER();
int InsertCount = help.SqlInsertBuilder(GetOrderData);
this.BeginInvoke(OptGetOrderData, "\r\n4、成功插入" + InsertCount + "条数据,正在执行存储过程请稍后...");
string ErrorMessage = help.exectrans();
if (string.IsNullOrEmpty(ErrorMessage.Trim()))
{
this.BeginInvoke(OptGetOrderData,"\r\n5、存储过程执行成功,所有操作均已成功执行完毕!");
}
else
{
this.BeginInvoke(OptGetOrderData, "\r\n5、存储过程执行失败!失败原因:" + ErrorMessage);
}
}
catch (Exception ex)
{
this.BeginInvoke(OptGetOrderData, "\r\n系统执行异常,异常原因:" + ex.Message);
}
}
}

Winform中子线程访问界面控件时被阻塞解决方案的更多相关文章

  1. 跨线程访问UI控件时的Lambda表达式

    工作中经常会用到跨线程访问UI控件的情况,由于.net本身机制,是不允许在非UI线程访问UI控件的,实际上跨线程访问UI控件还是 将访问UI的操作交给UI线程来处理的, 利用Control.Invok ...

  2. WPF / Win Form:多线程去修改或访问UI线程数据的方法( winform 跨线程访问UI控件 )

    WPF:谈谈各种多线程去修改或访问UI线程数据的方法http://www.cnblogs.com/mgen/archive/2012/03/10/2389509.html 子线程非法访问UI线程的数据 ...

  3. 扩展BindingList,防止增加、删除项时自动更新界面而不出现“跨线程操作界面控件 corss thread operation”异常

    在做界面程序时,常常需要一些数据类,界面元素通过绑定等方式显示出数据,然而由于UI线程不是线程安全的,一般都需要通过Invoke等方式来调用界面控件.但对于数据绑定bindingList而言,没法响应 ...

  4. C# Winform 跨线程更新UI控件常用方法汇总(多线程访问UI控件)

    概述 C#Winform编程中,跨线程直接更新UI控件的做法是不正确的,会时常出现“线程间操作无效: 从不是创建控件的线程访问它”的异常.处理跨线程更新Winform UI控件常用的方法有4种:1. ...

  5. 理解SynchronizationContext,如何在Winform里面跨线程访问UI控件

    SynchronizationContext 类是一个基类,可提供不带同步的自由线程上下文. 此类实现的同步模型的目的是使公共语言运行库内部的异步/同步操作能够针对不同的异步模型采取正确的行为.此模型 ...

  6. C# Winform 跨线程更新UI控件常用方法总结(转)

    出处:http://www.tuicool.com/articles/FNzURb 概述 C#Winform编程中,跨线程直接更新UI控件的做法是不正确的,会时常出现“线程间操作无效: 从不是创建控件 ...

  7. WinForm 简易仿360界面控件

    因为经常要做一些1.2千行的小工具,WinForm自带的TabCtrl又不美观,所以想做成360的样子,在网上找来找去,都只有散乱的代码,没有可以通用的结构,于是自己写了一个简易的通用控件. 控件主要 ...

  8. 实现 winform 异步跨线程访问UI控件

    在开发winform时经常会用到多线程防止界面出现假死现象,比如当你单击某个按钮时,需要执行很多代码,但是在执行过程中想实时的将当前执行的情况报告给用户,类型进度条或文本什么的. 这个时候很显然,如果 ...

  9. wpf(怎么跨线程访问wpf控件)

    在编写代码时,我们经常会碰到一些子线程中处理完的信息,需要通知另一个线程(我这边处理完了,该你了). 但是当我们通知WPF的UI线程时需要用到Dispatcher. 首先我们需要想好在UI控件上需要显 ...

随机推荐

  1. C# Winform中DataGridView的DataGridViewCheckBoxColumn CheckBox选中判断

    1.DataGridViewCheckBoxColumn CheckBox是否选中 在判断DataGridView中CheckBox选中列的时候,用DataGridViewRow.Cells[0].F ...

  2. 关于Eclipse中Jsp页面打不开并且显示Failed to create the part's controls的解决办法

    问题描述:同事从svn上导入的一个项目,jdk都设置好了以后,java.xml.html等文件都能打开,唯独jsp文件打不开,并且显示Failed to create the part's contr ...

  3. (原+转)ubuntu终端输出彩色文字

    转载请注明出处: http://www.cnblogs.com/darkknightzh/p/6066697.html 参考网址: http://www.tuicool.com/articles/jI ...

  4. POJ1671 动态规划

    POJ1671 问题重述: 本题求解一首N行诗可能的押韵结构的数目.所谓押韵结构,指的是指定的行数之间必须押韵.例如一首3行诗的押韵结构可以是aaa, aab, aba, baa, abc 5种(aa ...

  5. Cut the sticks

    def main(): n = int(raw_input()) arr = map(int, raw_input().strip().split()) for i in range(n): cutN ...

  6. centos在安装apache2.4版本的时候遇到ARP not found解决办法

    今日编译apache时出错: #./configure --prefix……检查编辑环境时出现: checking for APR... noconfigure: error: APR not fou ...

  7. BZOJ 1063 道路设计NOI2008

    http://www.lydsy.com/JudgeOnline/problem.php?id=1063 题意:给你一棵树,也有可能是不连通的,把树分成几个链,求每个点到根经过的最大链数最小,而且要输 ...

  8. 24C01的IIC 讀寫的c51程式

    /*------------------------------------------------------------------------------ 為了安全起見,程式中很多NOP是冗餘的 ...

  9. android:duplicateParentState属性解释

    android:duplicateParentState指的是当前控件是否跟随父控件的(点击.焦点等)状态 例:假设一Layout有两子View,对Layout进行监听点击事件:子ViewA一个设置d ...

  10. Android模仿微信语音聊天功能

    项目效果如下: 项目目录结构如下: 代码如下: AudioManager.java import java.io.File; import java.io.IOException; import ja ...