WPF 执行含有有while的方法

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




...全文
720 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); // 必须要有,否则卡死
}
}
  • 打赏
  • 举报
回复
查了些资料,异步,多线程
这样试了一下,还是卡死
  • 打赏
  • 举报
回复
遇到的问题是:一运行就卡死
内容概要:SSD2828QN4是一款MIPI主桥接芯片,用于连接应用处理器与传统并行LCD接口及支持MIPI从属接口的LCD驱动器。该芯片支持最高每通道1Gbps的串行链路速度,最多可配置4个数据通道,显著减少了信号数量。它支持多种接口模式,包括RGB+SPI组合接口,适用于驱动智能或非智能显示面板,并能通过命令模式和视频模式传输数据。芯片内置时钟和复位模块、外部接口、协议控制单元(PCU)、包处理单元(PPU)、错误校正码/循环冗余校验(ECC/CRC)模块、长包和命令缓冲区、D-PHY控制器、模拟收发器以及内部锁相环(PLL),确保了高效的数据传输和系统稳定性。此外,文档详细描述了芯片的引脚分配、寄存器设置、操作模式、电源序列、时序特性等关键参数,为开发者提供了全面的技术指导。 适合人群:具备一定硬件设计基础,从事嵌入式系统开发、显示技术研究的研发人员。 使用场景及目标:①实现应用处理器与MIPI兼容显示屏之间的高速数据传输;②优化显示系统的功耗表现,减少电磁干扰(EMI);③通过灵活配置不同接口模式来适应各种显示设备的需求。 阅读建议:此文档面向具有一定电子工程背景的专业人士,建议读者结合实际项目需求深入理解各章节内容,特别是关于寄存器配置、时序要求等方面的具体说明。对于初次接触此类技术的开发者而言,建议先熟悉基本概念再逐步掌握高级功能的应用方法

111,129

社区成员

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

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

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