从不同的非静态类调用非静态方法

时间:2013-09-25 08:41:24

标签: c# exception windows-8 static windows-store-apps

我有Mainpage.cs,我有方法public void websocketRequestGetListOfUni()然后我有这个类

public class RegisterResponseReceiverRegisterDevice : ResponseReceiver
    {
        public override void onResponseReceived(byte[] header, byte[] response)
        {
            RegisterResponse rr = RegisterResponse.ParseFrom(response);

            var t = new MainPage();
            t.websocketRequestGetListOfUni();
        }
        public override void onError() { }
    }

public void websocketRequestGetListOfUni()
    {
        IntMessage req = IntMessage.CreateBuilder().SetValue(1).Build();
        WebSocketClient.write(3, 7, req, new RegisterResponseReceiverGetListOfUni());
    }

我想在课程websocketRequestGetListOfUni()中使用调用方法RegisterResponseReceiverRegisterDevice,但是当我调用它时,我得到var t = new MainPage();

错误

  

应用程序调用了一个分配给不同的接口   线程。

我也尝试使用

this.Dispatcher.RunAsync(CoreDispatcherPriority.Normal, () => mymethoc);

但Dispather无法识别。怎么知道如何调用我的方法?

这是主页以便更好地理解:https://www.dropbox.com/s/oz6qb0naa0u0for/Mainpage.cs.txt

1 个答案:

答案 0 :(得分:1)

var t = new MainPage();将实现页面的实例化(包括UI部分(由MainPage构造函数中的Initialise调用实例化))因此,仅仅为了访问方法而实例化它是一个非常糟糕的主意。我强烈建议你尽可能地覆盖你的代码,这样你就不需要那么做了。特别是你应该看一下MVVM模式。

如果您仍想这样做,可以使用以下代码在UI线程上调度方法:

await CoreApplication.MainView.CoreWindow.RunAsync(CoreDispatcherPriority.Normal, () => mymethoc);