C#在不同线程中如何设置一个窗体是另一个窗体的父窗体 主窗体form1是Run()出来的,另一个窗体form2是在新线程中使用showdialog方法显示出来的,现在需要把form2的父窗体设置为form1,改如何实现? 解决方案 » 免费领取超大流量手机卡,每月29元包185G流量+100分钟通话, 中国电信官方发货 你怎么能在非工作线程showdialog呢? 我不太明白,我把代码贴出来吧。。ScanfAppFrm是想被设为子窗体的,frm是想被设为父窗体的,frm是Run()出来的,显示ScanfAppFrm时用了个这 ThreadPool.QueueUserWorkItem(new WaitCallback(showScanfAppDialog), ScanfAppFrm); //显示扫描申请窗体 private void showScanfAppDialog(object form) { ScanfAppFrm = (扫描申请)form; //ScanfAppFrm.MdiParent = frm; ScanfAppFrm.ShowDialog(); }现在想把frm设置为ScanfAppFrm的父窗体,这个应该咋改呢? 请回到主线程创建并调用ShowDialog,也就是用Invoke或者BeginInvoke进行所有UI相关操作 Invoke或者BeginInvoke应该由主窗体调用还是非主窗体? 在主线程中调用showdialog后主线程不就阻塞在这块了么,我在showdialog后还需要和服务器沟通,若主线程调用showdialog那就不能及时收到服务器的消息了,除非把showdialog的窗体关闭,才能收到消息。。 Thread th = new Thread(new ThreadStart(ExportCost)); th.SetApartmentState(ApartmentState.STA); th.Start();private void ExportCost() { SetExportBusinessNum(); if (!string.IsNullOrEmpty(ExportBusinessNum)) { Query_Customs_CustomsDeclaration query_Customs_CustomsDeclaration = GetQuery_Customs_CustomsDeclaration(); query_Customs_CustomsDeclaration.BusinessNum = ExportBusinessNum; DataTable dt = Customs_CustomsDeclarationManager.QDZYExportCostExcel(query_Customs_CustomsDeclaration); if (dt != null && dt.Rows.Count > 0) { SaveFileDialog sfd = new SaveFileDialog(); sfd.Filter = "excel文件(*.xls)|*.xls"; sfd.FileName = "财务数据"; DataTable dtCopy = dt.Copy(); if (dt.Columns.Contains("是否审核")) dt.Columns.Remove("是否审核"); if (dt.Columns.Contains("是否导出")) dt.Columns.Remove("是否导出"); if (dt.Columns.Contains("Id")) dt.Columns.Remove("Id"); if (sfd.ShowDialog() == DialogResult.OK) { if (CommonMethodHelper.ExportExcel_NoScientificCalc(dt, sfd.FileName)) { ShowInformationMsgBox(sfd.FileName + "导出成功!"); Customs_CustomsDeclarationManager.UpdateIsExport(query_Customs_CustomsDeclaration); InvokeSearchCostData(); } } } else { ShowInformationMsgBox("没有要导出数据!"); } } else { ShowInformationMsgBox("请选择您要导出的数据!"); } } 关于网络抓包的问题 ©©©©©©【戒指】帮看下这段代码的精华所在©©©©©© 请教高手,关于进程的问题 菜鸟问题c#连接sql数据如何显示 c#线程参考手册 请问C#中WinForm里有和WebForm里的框架frameset一样的机制吗?谢谢了! C#对于内存进行读写操作,想要做成如下的图形界面形式,问下大家有没有什么实现办法,高分悬赏 关于数据库中保存图片 关于登录窗口(原码),新手问题怎么处理? 如何在winform中画直线? 【分享】看到一个WPF的扫雷 我把前几天自己做的也放上来 #中lable及其内容怎样随对话框的改变成比例的改变
ScanfAppFrm是想被设为子窗体的,frm是想被设为父窗体的,frm是Run()出来的,
显示ScanfAppFrm时用了个这
ThreadPool.QueueUserWorkItem(new WaitCallback(showScanfAppDialog), ScanfAppFrm); //显示扫描申请窗体 private void showScanfAppDialog(object form)
{
ScanfAppFrm = (扫描申请)form;
//ScanfAppFrm.MdiParent = frm;
ScanfAppFrm.ShowDialog();
}
现在想把frm设置为ScanfAppFrm的父窗体,这个应该咋改呢?
Thread th = new Thread(new ThreadStart(ExportCost));
th.SetApartmentState(ApartmentState.STA);
th.Start();
private void ExportCost()
{
SetExportBusinessNum();
if (!string.IsNullOrEmpty(ExportBusinessNum))
{
Query_Customs_CustomsDeclaration query_Customs_CustomsDeclaration = GetQuery_Customs_CustomsDeclaration();
query_Customs_CustomsDeclaration.BusinessNum = ExportBusinessNum; DataTable dt = Customs_CustomsDeclarationManager.QDZYExportCostExcel(query_Customs_CustomsDeclaration);
if (dt != null && dt.Rows.Count > 0)
{
SaveFileDialog sfd = new SaveFileDialog();
sfd.Filter = "excel文件(*.xls)|*.xls";
sfd.FileName = "财务数据";
DataTable dtCopy = dt.Copy();
if (dt.Columns.Contains("是否审核")) dt.Columns.Remove("是否审核");
if (dt.Columns.Contains("是否导出")) dt.Columns.Remove("是否导出");
if (dt.Columns.Contains("Id")) dt.Columns.Remove("Id");
if (sfd.ShowDialog() == DialogResult.OK)
{
if (CommonMethodHelper.ExportExcel_NoScientificCalc(dt, sfd.FileName))
{
ShowInformationMsgBox(sfd.FileName + "导出成功!");
Customs_CustomsDeclarationManager.UpdateIsExport(query_Customs_CustomsDeclaration);
InvokeSearchCostData();
}
}
}
else
{
ShowInformationMsgBox("没有要导出数据!");
}
}
else
{
ShowInformationMsgBox("请选择您要导出的数据!");
}
}