当前位置: 代码迷 >> Windows Mobile >> WP C++/CX运行时组件,该如何处理
  详细解决方案

WP C++/CX运行时组件,该如何处理

热度:207   发布时间:2016-04-25 07:09:39.0
WP C++/CX运行时组件
本帖最后由 LH806732 于 2014-12-19 11:33:42 编辑
以下为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试试呢?
第二个不知道。
  相关解决方案