Метод не выполняется внутри лямбда-обратного вызова форм MessageCenter xamarin - PullRequest
0 голосов
/ 19 января 2020

Я использую класс MessageCenter для передачи строки из собственного кода Android в общий код Xamarin. Но я сталкиваюсь со следующей проблемой. В приведенном ниже коде я отправляю строку, и они я могу получить ее, но из выражений внутри делегата Action выполняется только оператор отладки, другие просто игнорируются.

         public partial class Search : ContentPage
{



    public Search()
    {
        InitializeComponent();

       }






        MessagingCenter.Send<string>("xamarin", "FromAndroid");

        //receing msg from android shared intent between apps
        MessagingCenter.Subscribe<string>(this, "FromAndroid", (msg) =>
       {

           searchBar.Text = msg;   // that line do not update my UI search text if is outside is 
        updated
           Debug.WriteLine("+++++++++++++++++++++++++++++++++++ " + msg);




       });


    }











}

Обычно метод Send находится в проекте Android я просто переместил его сюда для краткости. Я могу подтвердить, что метод Subscribe успешно получил строку "xamarin".

Ответы [ 2 ]

1 голос
/ 21 января 2020

Согласно вашему описанию и коду, я предлагаю вам сначала попробовать подписаться на сообщение, а затем отправить на сообщение.

Из вашего кода вы просто отправляете сообщение, а затем подписываете сообщение, чтобы вы могли не обновлять интерфейс.

Я использую код в конструкторе ContentPage, он все еще может изменять интерфейс.

<ContentPage.Content>
    <StackLayout>
        <Label x:Name="label1" />
    </StackLayout>
</ContentPage.Content>

 public  Page16()
    {
        InitializeComponent();

        MessagingCenter.Subscribe<Page16, string>(this, "Xamarin", async (sender, arg) =>
        {
            label1.Text = arg;
        });
        MessagingCenter.Send<Page16, string>(this,"Xamarin","this is test");

    }
0 голосов
/ 19 января 2020

если вы хотите передать параметр, вам нужны два аргумента типа

MessagingCenter.Send<object, string>(this, "FromAndroid", "data");

MessagingCenter.Subscribe<object, string>(this, "FromAndroid", async (sender, arg) =>
{
    searchBar.Text = arg; 
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...