0

最後が実行されない「更新」関数があり、関数「Console.WriteLine」を使用して、関数が中断された場所を知ります。Udate 関数は次のとおりです。

async Task Update()
    {
        count++;
        try
        {
            List<string> cmds = new List<string>();
            if (Ev3Messaging.IsConnected())
            {
                Tuple<string, string> response = null;
                Console.WriteLine("Test1"); // Displayed
                try
                {
                    response = await Ev3Messaging.ReceiveText(true);
                }
                catch(Exception ex)
                {
                    Console.WriteLine(ex.Source + ": " + ex.Message); // Not displayed
                }
                Console.WriteLine("Test2"); // Not displayed
                while (response != null)
                {
                    Console.WriteLine("Test2: " + response.Item2);
                    string[] list = response.Item2.Split(';');
                    foreach (string cmd in list)
                        cmds.Add(cmd);
                    response = await Ev3Messaging.ReceiveText(false);
                }
            }
            Canvas canvas = _screenSV.Holder.LockCanvas();
            if (canvas != null)
            {
                foreach (string cmd in cmds)
                    ExecuteCommand(cmd, canvas);
                _screenSV.Holder.UnlockCanvasAndPost(canvas);
            }
        }
        catch (Exception ex)
        {
            Console.WriteLine(ex.Source + ": " + ex.Message);
        }
    }

Update 関数は、次のコードによって 100 ミリ秒ごとに呼び出されます。

var timer = new System.Threading.Timer((e) =>
        {
            RunOnUiThread(async () => await Update());
        }, null, 0, 100);

「Test1」と表示されますが、例外(「EV3Messaging.ReceiveText」関数では問題ありません)も「Test2」(「ShowAlert("Test2");」に到達する前に関数が中断された)も表示されません。

どのように可能ですか?

「Ev3Messaging.ReceiveText」関数を投稿してほしい場合は、私に依頼してください。十分に大きいので投稿しませんでしたが、どうすればこの問題が発生するのか知りたいだけです...

前もって感謝します。

4

0 に答える 0