DatagramSocket.ReceivedMessage中的MediaElement上的UnauthorizedAccessException

时间:2013-10-28 13:08:46

标签: c# .net windows-phone

我想在第一包数据出现时启动我的mediaElement(MediaElement类的实例)。所以我这样写了。

private void SocketOnMessageReceived(DatagramSocket sender, DatagramSocketMessageReceivedEventArgs args)
        {
            if (isPaused) return;

            if (!isStarted)
            {
                mediaElement.Play();
                isStarted = true;
            }

            var r = args.GetDataReader();
            var l = r.UnconsumedBufferLength;
            var buff = new byte[l];
            r.ReadBytes(buff);

            if (System.Text.Encoding.UTF8.GetString(buff, 0, buff.Length) != "stop")
            {
                AudioSteam.AddBytes(buff);
            }
            else
            {
                mediaElement.Pause();
                isStarted = false;
                Debug.WriteLine("stop");
            }
            buff = null;

        }

当然elier我为mediaElement(MediaStreamSource)设置了源代码。

var socket = new DatagramSocket();
socket.MessageReceived += SocketOnMessageReceived;
await socket.BindServiceNameAsync("4444");
HostName multicast = new HostName("230.0.0.1");
socket.JoinMulticastGroup(multicast);
isPaused = true;
isStarted = false;
AudioSteam = new Sine440AudioStreamSource(44100);
mdiaElement.SetSource(AudioSteam); 

首先,我在mediaElement.Start()获得System.IO.FileNotFoundException然后System.UnauthorizedAccessException;我不知道为什么。

任何建议都将受到赞赏。

1 个答案:

答案 0 :(得分:0)

事实证明DatagramSocket.ReceivedMessage方法正在其他线程上运行,因此如果您想要从方法范围中访问变量,则需要使用Dispatcher.BeginInvoke()

Dispatcher.BeginInvoke(() =>{
                      //Code
                    });

总而言之,我辞职了。