Tag: multithreading

如何在C#中等待线程完成?

我创build了两个线程来获取一个表和一个函数ExcelSave(DataTable, nameofSheetinExcel)来保存所有的DataTable到基于Thread的名字的Excel。 我想等待第一个线程保存完成,并转到第二个线程保存。 我创build了两个线程: var t1 = new Thread(new ThreadStart(RegisterInfo)) { Name = "Thread1" }; t1.Start(); var t2 = new Thread(new ThreadStart(RegisterInfo)) { Name = "Thread2" }; t2.Start(); t1.Join(); t2.Join(); 我的代码保存文件excel是这样的: if (Thread.CurrentThread.Name == "Thread1") ExcelSave(dt, "Thread 1"); else ExcelSave(dt, "Thread 2"); 因为我有例外: 保存文件时出错,因为进程无法访问文件“D:\ lapproject \ bin \ Debug \ data.xlsx”,因为另一个进程正在使用它。 System.Exception {System.IO.IOException}` 有任何方法可以避免这种情况? 感谢所有人。

如何从Excel互操作事件线程更新GUI控件?

我有一个C#GUI应用程序,通过官方的互操作COM库自动化一些Excel任务。 我正在为SheetActivate事件提供我自己的事件处理程序。 // fetch the excel handle var excel = viewer.GetApplication() as Microsoft.Office.Interop.Excel.Application; // set sheet activate event handler excel.SheetActivate += excel_SheetActivate; 我相信互操作库从它创build的线程调用这个事件处理程序。 我的问题是,我需要更新基于这个事件的一些GUI组件,但是我不能在这些线程上的GUI上执行更新操作。 我的问题是,从这个优秀的互操作事件处理程序,我相信是在自己的线程,我怎样才能安全地更新我的graphics用户界面以线程安全的方式? 我问这是因为我目前正在接收更新GUI时有关跨线程操作的运行时错误。 编辑:我相信链接和build议可能的答案是WPF。 我的应用程序不是WPF,它是较早的WinForms。 我没有看到一个Application.Current属性。

对于Excel 2003,XLL中的UDF可以使用多个线程吗?

FYI 1:UDF =用户定义(工作表)函数FYI 2:XLL = Excel加载项(DLL – > XLL) 我正在使用Microsoft的Excel4()API在C / C ++中编写用于Excel的XLL加载项。 链接: http : //msdn.microsoft.com/en-us/library/bb687835.aspx 我有一个“复杂”的任务,我想使用多个线程来获得更好的性能。 虽然我明白在Excel 2003中的计算是单线程的,但我想知道我的UDF是否可以(a)产生线程来完成工作,(b)等待线程完成,以及(c)返回结果。 要非常清楚,我不会做任何Excel自动化,也不会在线程中调用Excel4()。 伪代码: 变体MyComplexUDF(变体input1,变体input2) { 线程t1 =新的WorkerThread(input1); 线程t2 =新的WorkerThread(input2); t1.join(); t2.join(); return [t1.Result(),t2.Result()]; } 表面上,这似乎是好的,但我不是在DLL / XLL和线程的专家。 PS我已经search了谷歌(高和低)这个答案,并没有find关于此事的任何事情。

使用Excel作为.NET代码的模板

我目前正在devise阶段的一个应用程序,目前在Excel中运行。 它是一个包含复杂的math(三元代数等)公式的科学应用程序。 最初我试图用代码做所有的事情,很快就发现将这些科学公式转换成.NET的过程非常繁琐(很有可能出现错误)。 另一种select是使用Excel电子表格及其单元格公式的“模板”,其中.NET中的用户界面允许用户input数据,.NET(Web应用程序)将此input数据传递给Excel电子表格,Excel电子表格工作并给出结果,.NET应用程序读取并显示给用户。 (这是对build议devise的简单解释)。 它将成为Web应用程序(不公开面向网站)。 其中一个问题(即我的)将是当多个用户使用该应用程序时,Excel文件将有多个线程读/写的问题。 克服这个我有关于存储在SQL数据库中的文件的副本,每个会话复制到临时文件夹与Guid名称(使其唯一),一旦它完成删除文件等 我的问题是,有没有人看到这个计划中的任何缺陷或缺点,例如性能,读/写excel等,或者我需要考虑的其他事情? 我打算使用OpenXML和ClosedXML库。 我是否需要在部署服务器上安装Office以使其工作? (我想不会)。 谢谢,

为什么我的GUI不能更新?

我正在创build一个程序,通过成千上万的Excel单元格,并分割string和表单,并根据这些数据填充图表。 我遇到的问题是与GUI。 我把程序分成两个独立的类。 一个处理Excel数据,另一个是WPF窗体的MainWindow类。 问题在于MainWindow没有随着信息的更新而更新。 它应该更新一个对话框和一个进度条,通过这些步骤进行显示。 它没有做任何事情,但终于出现在最后完全充满,就好像它一直在这样做。 最初是build议我把职责分成多个线程,我已经这样做了,但似乎并不奏效。 这是我处理线程的方式吗? 我可以根据要求发布尽可能多的代码,但是这是很多的,所以如果它是简单的,我不想把它全部转储。 Private Sub runButton_Click(sender As Object, e As RoutedEventArgs) Handles runButton.Click If FillCheck() = True Then program = New ExcelClass(dataText.Content.ToString, saveText.Content.ToString) Dim excelThread As New System.Threading.Thread(AddressOf program.beginProgram) excelThread.Start() checkUpdate() ElseIf FillCheck() = False Then MsgBox("You must select both the file to get the data from and […]

如何在VSTO Addin的长时间运行的任务中在UI上取消button?

我在c#中创build了一个Excel Addin,通过几行1000行并对单元格执行一些更新。 这是非常长的运行,我希望用户select取消,如果需要的话。 因为默认情况下,UI在处理过程中没有响应。 Excel Addin框架中是否有这样的东西? 我是否创build一个新的线程? 那会不会导致更新UI线程的问题呢? 寻找一些大方向或链接的东西,让我开始。 编辑:给出的例子是创build一个简单的button点击事件。 我明白那个。 我需要在VSTO中取消一个更复杂的过程。

PHP线程脚本中止

我得到了一个php脚本在我的服务器(一个线程)上运行,每1小时。 这个线程正在做的是,用户可以用数据上传excel文件,线程将excel文件中的数据与数据库中的数据进行比较,并执行某些操作(如果find的行不存在,则不执行某些数据库插入操作)。 要阅读excel文件,我打电话给: $data = new Spreadsheet_Excel_Reader(); $data->read($file); 用户可以上传更多的xls文件,在服务器上调用:File_1.xls,File_2.xls,File_3.xls我读取第一个文件得到所有的数据做所有的比较做所有的插入,这可能需要一段时间它的超过6000 excel中的行。 我注意到,如果线程运行时间很长,例如他可以插入文件1和文件2,并且文件是6000+行这样的大文件,我会在我的错误日志中得到一个中止。 我认为这是excel读者的错。 有任何想法吗?

在Diagnostics.Process.Start()完成之前,应用程序不会退出

我有一个打开Excel .xlsm文件的应用程序。 Excel文件在Auto_Open()中有一堆长时间运行的代码,可能需要几分钟才能完成。 目前,我打开Excel文件,而macros仍在运行,我退出我的应用程序。 主窗口closures,但我可以看到MyApp.exe在任务pipe理器中运行,直到macros完成,此时MyApp.exe进程结束。 private void btnOpenExcel_Click(object sender, RoutedEventArgs e) { System.Diagnostics.Process.Start(excelFilePath); } private void btnClose_Click(object sender, RoutedEventArgs e) { Application.Current.Shutdown(); //Also tried this.Close(); } 我希望能够打开Excel文件,然后退出我的应用程序,而不必等待Excelmacros完成。 这可能吗?

使用asynchronous任务来检查Excel中的数字的性能

我做了简单的validation方法,检查单元格中的数据是否是数字。 public async void checkNumberMethod(Excel.Range numericRange, bool isCompulsary) { int errorCnt = await checkNumberAsync( numericRange, colTable, isCompulsary); } private Task<int> checkNumberAsync(Excel.Range numericRange, bool isCompulsary) { return Task.Run<int>(() => checkNumber(numericRange,isCompulsary)); } private int checkNumber(Excel.Range numericRange, bool isCompulsary) { if (isCompulsary == true) { foreach(Excel.Range item in numericRange) { //Do stuff } } else { foreach(Excel.Range item […]

如何在vba中实现multithreading和其他具体事宜

我有一个大约25张的电子表格。 在一些特别是6,7,13,17,18,19表我填充他们与数据库值。 在一些表格中,我填充了两个表格的数据。 现在我需要创build一个button,将执行以下操作。 在button单击事件我需要遍历所有工作表,看看是否有任何工作表填充。如果填充,然后将这些内容复制到一个文件。我已经实现了应付一个表内容到一个文件。 问题1)我不明白如何做多个文件。 问题2)如何logging一个特定的表格已经填充了两个表值。因为我需要每个表格创build一个文件。 问题3)最重要的这将花费很多时间,因此我想要加快我的操作,所以我想要做multithreading。 任何其他方式来提高速度将是伟大的。