1

MainPageWeb サービスへの非同期呼び出しの応答に基づいて、アプリのテキストを設定したいと思います。

「別のスレッド用にマーシャリングされたインターフェイスを呼び出したアプリケーション」というメッセージが表示されます。だから私は実行する必要があることを知っています

MainPage.TB_Response.text = response;

プライマリ/メイン スレッドについてですが、どうすればよいかわかりません

編集:ここに私の応答ハンドラがあります

    private void ReadResponse(IAsyncResult asyncResult)
    {
        System.Diagnostics.Debug.WriteLine("ReadResponse");
        try
        {
            // The downloaded resource ends up in the variable named content. 
            var content = new MemoryStream();

            // State of request is asynchronous.
            //RequestState myRequestState = (RequestState)asyncResult.AsyncState;
            HttpWebRequest myHttpWebRequest2 = (HttpWebRequest)asyncResult.AsyncState;
            HttpWebResponse response = (HttpWebResponse)myHttpWebRequest2.EndGetResponse(asyncResult);

            //do whatever
            using (Stream responseStream = response.GetResponseStream())
            {
                responseStream.CopyTo(content);
                byte[] data = content.ToArray();
                if (data.Length > 0)
                {
                    string temp = System.Text.Encoding.UTF8.GetString(data, 0, data.Length);
                    MainPage.TB_Reponse.Text = temp;
                    System.Diagnostics.Debug.WriteLine(temp);
                }
            }

        }
        catch (WebException e)
        {

            System.Diagnostics.Debug.WriteLine(e.Message);
        }
    }

Edit2: 私の MainPage クラス

public sealed partial class MainPage : Page
{
    public static TextBlock TB_Reponse;
    public MainPage()
    {
        this.InitializeComponent();
        MainPage.TB_Reponse = this.TB_Response;
    }

    protected override void OnNavigatedTo(NavigationEventArgs e)
    {

    }

    private void BTN_Login_Click(object sender, RoutedEventArgs e)
    {
        ...
    }
}
4

1 に答える 1

0

だから私は私の問題を解決するためにこの解決策を見つけました

デリゲート 'System.Action<object>' は 0 引数を取らない - C# - タスク

現在の同期コンテキストを保存するように ServerRequest オブジェクトをセットアップします

ui = TaskScheduler.FromCurrentSynchronizationContext();

次に、応答ハンドラーで次を実行します。

Task.Factory.StartNew(() => 
                            {
                                MainPage.TB_Reponse.Text = temp; //This is run on the same thread as the UI
                            },System.Threading.CancellationToken.None , TaskCreationOptions.None, instance.ui);
于 2012-10-19T06:17:52.373 に答える