Winforms INotifyPropertyChanged更新UI在长时间运行时挂起

Winforms INotifyPropertyChanged更新UI在长时间运行时挂起,winforms,inotifypropertychanged,Winforms,Inotifypropertychanged,我制作了一个以下示例,试图在长时间操作运行时动态更新我的UI,但UI在运行时会挂起 这是我的实体类: public class ClsTest : INotifyPropertyChanged { private string _text; public string Text { get { return _text; } set { if (string.IsNullOrEmpty(value

我制作了一个以下示例,试图在长时间操作运行时动态更新我的UI,但UI在运行时会挂起

这是我的实体类:

public class ClsTest : INotifyPropertyChanged
{
    private string _text;

    public string Text
    {
        get { return _text; }
        set
        {

            if (string.IsNullOrEmpty(value) && value == _text)
                return;
            _text = value;
            NotifyPropertyChanged(() => Text);
        }
    }


    public event PropertyChangedEventHandler PropertyChanged;

    public void NotifyPropertyChanged<T>(Expression<Func<T>> property)
    {
        if (PropertyChanged == null)
            return;

        var memberExpression = property.Body as MemberExpression;

        if (memberExpression == null)
            return;

        PropertyChanged.Invoke(this, new PropertyChangedEventArgs(memberExpression.Member.Name));
    }

}
当我在按钮单击方法中运行以下代码时,它将挂起:

 for (int i = 0; i < 20; i++)
        {
            x.Text = i.ToString();

            System.Threading.Thread.Sleep(1000);
        }
for(int i=0;i<20;i++)
{
x、 Text=i.ToString();
系统线程线程睡眠(1000);
}

如何解决此问题?

您似乎正在UI线程中运行此功能。显然,UI将挂起。你需要某种工作线程。使用
Task.Run
运行耗时的任务。如何重新构造代码以满足要求?那么,谢谢你。请参考我最近的答案和答案。如果这不能帮助您更新您的问题,您正在执行什么操作来代替
Thread.Sleep(1000)
?那我会尽力帮忙的。
 for (int i = 0; i < 20; i++)
        {
            x.Text = i.ToString();

            System.Threading.Thread.Sleep(1000);
        }