C#自定义事件在类中不更新文本框

时间:2016-03-27 19:08:10

标签: c# win-universal-app

我的自定义事件无法更新我的UWP应用程序上的文本框。如果我用debug.Writeline替换Textbox1.Text它可以工作。我有理由不能使用事件更新文本框吗?如果我使用Progress对象,它可以工作。我只想弄清楚为什么它不适用于我自己的自定义事件。谢谢

 public sealed partial class MainPage : Page
{
    public MainPage()
    {
        this.InitializeComponent();
    }

    private void button_click(object sender, RoutedEventArgs e)
    {
        recData myRecDataobject = new recData();
        myRecDataobject.dataRecvEvent += () =>
        {
            textBox2.Text = "Event Occured"; // This throws an error
            Debug.WriteLine("test2");
        };

        Progress<int> progress = new Progress<int>();
        myRecDataobject.getDataMethodAsync(progress);
        progress.ProgressChanged += (o, result) =>
        {
            textBox1.Text = result.ToString();

        };

    }

}

public class recData
{
    public delegate void myEvenetHandlerDelegate();
    public event myEvenetHandlerDelegate dataRecvEvent;


    private int _myValue;
    public int myValue
    {
        get
        {
            return _myValue;
        }
        set
        {
            _myValue = value;
        }
    }

    public async void getDataMethodAsync(Progress<int> progress)
    {
        await getDataMethod(progress);
    }

    private Task getDataMethod(IProgress<int> progress)
    {
        return Task.Factory.StartNew(() =>
        {
            for (int i = 0; i < 1000; i++)
            {
                Task.Delay(2000).Wait();
                if (dataRecvEvent != null)
                {
                    dataRecvEvent();
                    progress.Report(i);
                }

            }

        });
    }


}

1 个答案:

答案 0 :(得分:1)

您正在尝试从后台线程更新XAML属性。这不起作用(您的错误应该是&#34;访问被拒绝&#34;)。

使用Dispatcher.BeginInvoke在UI线程上安排TextBox属性更新。