locked
Windows Phone C++/CX运行时疑问 RRS feed

  • 问题

  • 以下为C++/CX代码,调用时用C#做测试,但是有2个问题:
    1、在:DecAsync(int x)中因为x不能用值传递(否则编译器报错,因为while中使用了x--),所以用了引用,但用了引用之后使用x时debug看到却是使用x的地址
    2、C#中未设置CurrentValueEvent事件,但程序没报错。而且不能使用if (nullptr == CurrentValueEvent),编译器报错

    有没有关于C++/CX的中文资料(有没考虑英文不好的人)?微软的东西总是资料太少,太简单!

    C++/CX运行时组件代码:

    Calculator.h

    namespace WindowsRTComponentDemo01
    {
        public delegate void CurrentValueDelegate(int sum);
     
        public ref class Calculator sealed
        {
        public:
            Calculator();
     
            IAsyncAction^ DecAsync(int x);//无返回值,无处理进度报告
            event CurrentValueDelegate^ CurrentValueEvent;
        };
    }


    Calculator.cpp

    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); })));
    }



    2014年12月19日 13:03

答案

  • DX的中文资料确实很少,我也是仿照着学习

    对于你的问题,可否共享下你的工程文件?

    • 已标记为答案 oneonce 2017年9月13日 7:37
    2014年12月24日 1:55

全部回复

  • DX的中文资料确实很少,我也是仿照着学习

    对于你的问题,可否共享下你的工程文件?

    • 已标记为答案 oneonce 2017年9月13日 7:37
    2014年12月24日 1:55
  • DX的中文资料确实很少,我也是仿照着学习

    对于你的问题,可否共享下你的工程文件?

    你留一个邮箱给我
    2015年2月28日 3:25
  • 没有人碰到这问题吗,我用的是VS2013 with Update 4
    2015年3月6日 9:19