【发布时间】:2012-08-10 21:26:01
【问题描述】:
在我的 Visual Studio 解决方案中,我用 C# 实现了 UI,并用原生 C++ 实现了一些代码。
我使用BackgroundWorker class来实现执行长操作的报告进度。
如何使用 BackgroundWorker 报告我的原生 C++ 代码的进度?
也就是说,如何将下面的 C# 代码重写为原生 C++ 并从 C# 调用获得的 C++ 代码? 如果无法直接重写下面的代码,最好了解其他等效解决方案。谢谢。
class MyClass
{
public void Calculate(object sender, DoWorkEventArgs e)
{
BackgroundWorker worker = sender as BackgroundWorker;
for (int i = 0; i < StepCount; i++)
{
if (worker.CancellationPending)
{
e.Cancel = true;
break;
}
// code which handles current iteration here
worker.ReportProgress((i + 1) * 100 / StepCount,
"Report progress message");
}
}
}
【问题讨论】:
-
只是一个抽象的想法:鉴于BackgroundWorker只是一个单独的线程,你可以在调用c#时声明一个不安全的代码段;分拆一个新线程;并声明一个函数指针返回报告进度。简而言之,您是否可以在线程和委托的抽象之下的一层进行编程。
-
写原生代码有什么意义?您使用托管对象,因此很自然地在托管代码中编写它。如果你想用原生 c++ 写这样的东西,那么你需要原生代码
-
@Even Dark 首先,您的评论与问题无关。但无论如何。 UI用C#写更方便,C++计算密集型代码,我什至不说你没有选择的情况,因为你没有启动项目,你只有一个代码。当你有 C++ 和 C# 代码时,你可能需要它们之间的一些通信——在我的例子中,我需要报告进度。
标签: c# c++ visual-c++ interop