WPF 执行含有有while的方法

我深知我该努力了 2020-04-25 01:46:20
WPF 执行含有有while的方法
点击确定,把textbox的值赋给全局变量
点击开始,执行Click方法




...全文
663 13 打赏 收藏 转发到动态 举报
写回复
用AI写文章
13 条回复
切换为时间正序
请发表友善的回复…
发表回复
孤独之影 2020-04-28
  • 打赏
  • 举报
回复
方法看起来不错,但对电脑小白有点麻烦
zggdzjj 2020-04-27
  • 打赏
  • 举报
回复
多谢分享,我要学习!
  • 打赏
  • 举报
回复
多谢各位老哥,已经解决了 ,我再试试Delay
hztltgg 2020-04-26
  • 打赏
  • 举报
回复
是哦,直接delay就好了

using System.Threading.Tasks;
using System.Windows;

namespace WpfApp1 {
    /// <summary>
    /// MainWindow.xaml 的交互逻辑
    /// </summary>
    public partial class MainWindow : Window {
        public MainWindow() {
            InitializeComponent();
        }

        private void button1_Click(object sender, RoutedEventArgs e) {
            Class1.Num1 = int.Parse(textbox1.Text);
        }

        private async void button2_Click(object sender, RoutedEventArgs e) {
            richtextbox1.AppendText("start");

            while (true) {
                if (Class1.Num1 == 1) {
                    break;
                }
                await Task.Delay(1000);
            }

            richtextbox1.AppendText(Class1.Num1.ToString());
            richtextbox1.AppendText("end");
            Class1.Num1 = 0;
        }
    }

    public class Class1 {
        public static int Num1 { get; set; }
    }

}

  • 打赏
  • 举报
回复
在你的代码中,你使用一个子线程去运行一个 while 循环代码,但是你在子线程其中使用 Dispatcher.Invoke 去阻塞执行这个死循环代码,这叫什么呢?这就是自己阻塞。
Dear200892 2020-04-26
  • 打赏
  • 举报
回复
control.Dispatcher.Invoke(() => { control.Visibility = visibility; }); 任何线程中如果想执行UI操作,那么其线程单元必须设置为STA。 一个线程如果创建了UI对象,那么这个UI对象就只能被这个线程管理。 任何线程如果需要访问其他的线程创建的UI对象,只能通过其他线程的Dispatcher进行访问 一个线程如果没有执行任何UI操作,那么其关联的Dispatcher为null 以上文字内容选自https://www.cnblogs.com/DoNetCoder/p/4369903.html
  • 打赏
  • 举报
回复
异步的过程中,不要使用阻塞语句,包括 Thread.Sleep 这类应该用异步的 Task.Delay 来实现。我们为了演示一个耗时的计算过程才会用这个语句,真正的业务逻辑处理中用阻塞是很过时的。
  • 打赏
  • 举报
回复
写一个 Console 例子:
using System;
using System.Threading.Tasks;

namespace ConsoleApp1
{
class Program
{
static void Main(string[] args)
{
test1();
Console.WriteLine("..................按任意键结束");
Console.ReadKey();
}

static async void test1()
{
while (true)
{
Console.WriteLine(DateTime.Now.ToString());
await Task.Delay(5000);
}
}
}
}
hztltgg 2020-04-25
  • 打赏
  • 举报
回复
Action应该不用显式创建

        private async void Button2_Click(object sender, RoutedEventArgs e)
        {
            richtextbox1.AppendText("start");

            await Task.Run(() =>{
                while (true){
                    if (Class1.Num1 == 1) {
                        break; 
                    }
                    System.Threading.Thread.Sleep(100);
                }
            });

            richtextbox1.AppendText(Class1.Num1.ToString());
            richtextbox1.AppendText("end");
            Class1.Num1 = 0;
        }
hztltgg 2020-04-25
  • 打赏
  • 举报
回复
你的逻辑有些问题吧,而且用async语法会简单好看一些,我试了不卡

    public partial class MainWindow : Window
    {
        public MainWindow()
        {
            InitializeComponent();
        }

        private void Button1_Click(object sender, RoutedEventArgs e)
        {
            Class1.Num1 = int.Parse(textbox1.Text);
        }

        private async void Button2_Click(object sender, RoutedEventArgs e)
        {
            richtextbox1.AppendText("start");

            await Task.Run(new Action(
                () =>
                    {
                        while (true)
                        {
                            if (Class1.Num1 == 1) {

                                break;
                            }
                            System.Threading.Thread.Sleep(100);
                        }

                    }
                 ));

            richtextbox1.AppendText(Class1.Num1.ToString());
            richtextbox1.AppendText("end");
            Class1.Num1 = 0;
        }
    }

    public class Class1
    {
        public static int Num1 { get; set; }
    }
desperaso 2020-04-25
  • 打赏
  • 举报
回复
https://blog.csdn.net/desperaso/article/details/105728403


private void Modify_Sector()
{
while (true)
{
this.Dispatcher.InvokeAsync(() =>
{
。。。。。。。。。。。。
});
Thread.Sleep(1); // 必须要有,否则卡死
}
}
  • 打赏
  • 举报
回复
查了些资料,异步,多线程
这样试了一下,还是卡死
  • 打赏
  • 举报
回复
遇到的问题是:一运行就卡死

110,537

社区成员

发帖
与我相关
我的任务
社区描述
.NET技术 C#
社区管理员
  • C#
  • Web++
  • by_封爱
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告

让您成为最强悍的C#开发者

试试用AI创作助手写篇文章吧