以下为C++/CX代码,调用时用C#做测试,但是有2个问题:
1、在:DecAsync(int x)中因为x不能用值传递(否则编译器报错,因为while中使用了x--),所以用了引用,但用了引用之后使用x时debug看到却是使用x的地址。
2、C#中未设置CurrentValueEvent事件,但程序没报错。而且不能使用if (nullptr == CurrentValueEvent),编译器报错
C++/CX运行时:
namespace WindowsRTComponentDemo01
{
public delegate void CurrentValueDelegate(int sum);
public ref class Calculator sealed
{
public:
Calculator();
IAsyncAction^ DecAsync(int x);//无返回值,无处理进度报告
event CurrentValueDelegate^ CurrentValueEvent;
};
}
IAsyncAction^ Calculator::DecAsync(int x)
{
auto func = [&x](){//x是引用而不是值传递, 如果用值传递x--就报错
while (x > 0)
{
x--;
//if (nullptr != CurrentValueEvent)//使用这一句报错
CurrentValueEvent(result);//C#调用时没设置事件处理方法,按道理CurrentValueEvent,但为什么没报错
}
};
return create_async(func);
}
C#调用:
Calculator mCalculator;
mCalculator = new Calculator();
//mCalculator.CurrentValueEvent += GetCurrentValueEvent;//代码备注释了
//点击按钮时调用
await mCalculator.DecAsync(10000);
void GetCurrentValueEvent(int sum)
{
Dispatcher.BeginInvoke((new Action(() => { textbox_resultARP.Text = Convert.ToString(sum); })));
}
------解决思路----------------------
第一个确实是,引用的话,传的就是地址,你写成int* x试试呢?
第二个不知道。