Warning: file_get_contents(/data/phpspider/zhask/data//catemap/6/xamarin/3.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# Xamarin-是否有方法从本地项目通知Xamarin.Forms?_C#_Xamarin_Xamarin.android_Xamarin.forms - Fatal编程技术网

C# Xamarin-是否有方法从本地项目通知Xamarin.Forms?

C# Xamarin-是否有方法从本地项目通知Xamarin.Forms?,c#,xamarin,xamarin.android,xamarin.forms,C#,Xamarin,Xamarin.android,Xamarin.forms,因此,我的原生项目(Android MainActivity OnCreate)中有这段代码,它不做任何事情: var container = TinyIoCContainer.Current; TinyMessengerHub tmh = (TinyMessengerHub)container.Resolve<ITinyMessengerHub>(); tmh.Subscribe<LocalMessage>((m) => { // this doesn'

因此,我的原生项目(Android MainActivity OnCreate)中有这段代码,它不做任何事情:

var container = TinyIoCContainer.Current;
TinyMessengerHub tmh = (TinyMessengerHub)container.Resolve<ITinyMessengerHub>();

tmh.Subscribe<LocalMessage>((m) => {
    // this doesn't show
    Toast.MakeText(this, m.Content, ToastLength.Long);
});
var container=TinyIoCContainer.Current;
TinyMessengerHub tmh=(TinyMessengerHub)container.Resolve();
tmh.订阅((m)=>{
//这不显示
Toast.MakeText(this,m.Content,ToastLength.Long);
});
下面是我使用TinyMessenger通知应用程序的地方:

[Service(Exported = false), IntentFilter(new[] { "com.google.android.c2dm.intent.RECEIVE" })]
class MyGcmListenerService : GcmListenerService
{
    public override void OnMessageReceived(string from, Bundle data)
    {
        string msg = data.GetString("message");

        var container = TinyIoCContainer.Current;
        TinyMessengerHub tmh = (TinyMessengerHub)container.Resolve<ITinyMessengerHub>();
        tmh.Publish(new LocalMessage(this, msg));
    }
}
[Service(Exported=false),IntentFilter(new[]{“com.google.android.c2dm.intent.RECEIVE”}]
类MyGcmListenerService:GcmListenerService
{
public override void OnMessageReceived(来自的字符串,捆绑数据)
{
string msg=data.GetString(“消息”);
var container=TinyIoCContainer.Current;
TinyMessengerHub tmh=(TinyMessengerHub)container.Resolve();
发布(新本地消息(this,msg));
}
}
我试图将TinyMessenger添加到我的PCL中,但显然不受支持(TinyIoc.cs文件中缺少引用等,相同的代码在Android项目中运行良好)


那么,有没有办法将到达的消息通知Xamarin.Forms,以便我可以显示一个警报窗口?

这个例子是通过
页面完成的,但是您可以使用
应用程序类订阅/取消订阅,或者在应用程序逻辑中有选择地订阅/取消订阅

Xamarin.Forms
项目中,通过
MessageCenter
订阅/取消订阅邮件:

protected override void OnAppearing()
{
    base.OnAppearing();
    MessagingCenter.Subscribe<object, string>(this, "ShowAlertMessage", (sender, msg) =>
    {
        Device.BeginInvokeOnMainThread(() => {
            MainPage.DisplayAlert("Push message", msg, "OK"); 
        });
    });
}

protected override void OnDisappearing()
{
    base.OnDisappearing();
    MessagingCenter.Unsubscribe<object>(this, "ShowAlertMessage");
}
MessagingCenter.Send<object, string> (this, "ShowAlertMessage", "StackOverFlow Rocks");

Xamarin Forms有一个内置组件,可以满足您的需要。您有任何示例吗?在线示例似乎处理共享代码中的消息传递,但我如何在项目之间实现这一点?这:也将跨所有边界工作。谢谢,我还必须在UI线程中运行DisplayAlert函数,如下所示:
Device.beginInvokeMainThread(()=>{MainPage.DisplayAlert(“Push message”,msg,“OK”);})
@UrticaDioica,你是对的,我用
BeginInvokeOnMainThread
更新了答案。它对我不起作用,我得到了下一个异常:System.Reflection.TargetInvocationException:调用的目标引发了异常@SushiHangover@DamirBeylkhanov如果没有上下文,我不知道,用你的problem@SushiHangover我的上下文与本问题中描述的完全相同,当我发送消息p.s.XF v.2.3.4时发生异常