UpdateData函数的 wincore.cpp Line:883错误

<转帖自> http://pfa2008.blog.163.com/blog/static/60200748201071510561771/>

这是由于MFC对象不能跨线程访问造成的,解决方案,可以有创建一个新的线程,将MFC对象传递给另外一个线程。

但还有一种更简单的解决方案,就是由Debug模式换成Release模式,在编译运行就能解决该问题,但这样却不利于调试,并且这样做的具体原因我也不明白。

还有一种解决方案,是自定义一个消息,每当要更新数据时,就发送一个消息,调用消息函数来更新数据。

做法如下:

第一步:定义消息。
#define WM_ON_UPDATE_DATA (WM_USER+100)

第二步:在类头文件的AFX_MSG块中说明,定义消息处理函数

//{{AFX_MSG(CMySRDlg)
virtual BOOL OnInitDialog();
afx_msg LRESULT On_Update_Data_Message(WPARAM wParam, LPARAM lParam);
//}}AFX_MSG
DECLARE_MESSAGE_MAP()

第三步:写出该函数调用Update的函数体

LRESULT CMySRDlg::On_Update_Data_Message(WPARAM wParam, LPARAM lParam)
{
CMySRDlg* myDlg=(CMySRDlg*)wParam;
INT16 nTmp=(INT16)lParam;

myDlg->UpdateResult(nTmp); //处理过程以及调用UpdateData()在该函数中实现

return 0;
}

void CMySRDlg::UpdateResult( INT16 res )
{
if(res!=-1)
{
CString str;
str.Format("%d/r/n",res);
m_Result+=str;
UpdateData(FALSE);
}
}

第四步:在用户类的消息块中,使用ON_MESSAGE宏指令将消息映射到消息处理函数中。
BEGIN_MESSAGE_MAP(CMySRDlg, CDialog)
//{{AFX_MSG_MAP(CMySRDlg)
ON_MESSAGE(WM_ON_UPDATE_DATA,On_Update_Data_Message)
//}}AFX_MSG_MAP
END_MESSAGE_MAP()

第五步:在需要的地方调用SendMessage函数

SendMessage(WM_ON_UPDATE_DATA,(unsigned int)this, 100);

这种方法容易理解,也方便调试。

  • 1
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 1
    评论
Dim ws As Worksheet Dim lastRow As Long Set ws = ThisWorkbook.Worksheets("Sheet1") '清除格式和删除行列 ws.Cells.ClearFormats ws.Range("1:2").Delete Shift:=xlUp ws.Range("A:A,B:B,C:C,F:F,G:G,I:I,J:J,K:K,M:M,P:P,Q:Q,S:S,T:T").Delete Shift:=xlToLeft '添加新列 ws.Range("H1").Value = "回收时间" ws.Range("K1").Value = "回收人" ws.Range("L1").Value = "复核人" ws.Columns("E:E").Copy Destination:=ws.Columns("I:I") ws.Columns("F:F").Copy Destination:=ws.Columns("J:J") '筛选数据 ws.Range("A:D").AutoFilter ws.Range("A:D").AutoFilter Field:=1, Criteria1:="<>tt", VisibleDropDown:=False ws.Range("A:D").AutoFilter Field:=2, Criteria1:="<>996999", VisibleDropDown:=False ws.Range("A:D").AutoFilter Field:=3, Criteria1:="<>996999", VisibleDropDown:=False ws.Range("A:D").AutoFilter Field:=4, Criteria1:="<>*贴", Operator:=xlAnd, Criteria2:="<>*片", VisibleDropDown:=False '排序数据 With ws.Sort .SortFields.Clear .SortFields.Add2 Key:=ws.Range("A2:A500"), SortOn:=xlSortOnValues, Order:=xlAscending, DataOption:=xlSortNormal .SetRange ws.Range("A1:L500") .Header = xlYes .MatchCase = False .Orientation = xlTopToBottom .SortMethod = xlPinYin .Apply End With With ActiveSheet .Columns.AutoFit .Rows.AutoFit .Rows("1:1").Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove .Rows("1:1").Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove .Rows("1:1").Insert Shift:=xlDown, CopyOrigin:=xlFormatFromLeftOrAbove End With '合并单元格 With ws.Range("A1:L1") .Merge .Value = "yyy" End With '调整列宽 ws.Columns("B:B").ColumnWidth = 7.5 ws.Columns("E:E,I:I").ColumnWidth = 3.08 End Sub 改进
05-22
评论 1
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值