C#编程语句中,使用什么方法才能使等待时程序界面也有影响呢?比如用Thread.Sleep会使界面无反应的
时间: 2023-05-20 10:07:42 浏览: 116
C是一种通用的编程语言,是一种面向过程的程序设计语言。它有丰富的库支持,效率高,运行速度快,被广泛应用于系统级编程、操作系统开发、嵌入式系统开发、游戏开发、科学计算和大数据处理等领域。在计算机科学教育中,C语言也被广泛应用,作为编程基础课程的主要教学语言之一。
相关问题
private void RunObedient(int abc) { byte[] Action_array = new byte[13]; int kl = 0; Task.Run(() => { for(int i=0;i< abc;i++) { for (int k = 0; k < Obedient.GetLength(0); k++) { if (Obedient[k, 0] == 1 && Obedient[k, 1] == 1 && Obedient[k, 2] == 1) { break; } else { Thread.Sleep(200); Action_array = FDServo.FD_Write_Action_Cmd(1, Obedient[k, 0],1000); sendSerailPortData(Action_array); Thread.Sleep(200); Action_array = FDServo.FD_Write_Action_Cmd(2, Obedient[k, 1],1000); sendSerailPortData(Action_array); Thread.Sleep(200); Action_array = FDServo.FD_Write_Action_Cmd(3, Obedient[k, 2],1000); sendSerailPortData(Action_array); Thread.Sleep(200); Action_array = FDServo.FD_Write_Action_Cmd(4, Obedient[k, 3],1000); sendSerailPortData(Action_array); Thread.Sleep(200); Action_array = FDServo.FD_Write_Action_Cmd(5, Obedient[k, 4],1000); sendSerailPortData(Action_array); Thread.Sleep(200); Action_array = FDServo.FD_Write_Action_Cmd(6, Obedient[k, 5],1000); sendSerailPortData(Action_array); Thread.Sleep(200); Action_array = FDServo.FD_Write_Action_Cmd(7, Obedient[k, 6],1000); sendSerailPortData(Action_array); Thread.Sleep(200); C#中这段代码的含义
这段代码是一个 C# 中的方法,方法名为 RunObedient,该方法接受一个整数类型参数 abc。该方法包含了一个 Task.Run() 方法,该方法会在新的线程中执行一个循环,循环次数为 abc。在循环中,使用了两个 for 循环,分别遍历了二维数组 Obedient 的每一行和每一列。在内部的 for 循环中,使用了一些条件语句和线程休眠方法,控制了执行过程的流程和速度。在每次循环迭代中,调用了 FDServo 类的 FD_Write_Action_Cmd() 方法,该方法会返回一个 byte 类型的数组,该数组存储了执行动作的指令内容。最后,通过 sendSerailPortData() 方法将指令内容发送到串口,完成动作的执行。该方法的主要作用就是按照给定的 Obedient 数组中的动作指令执行机器人的动作。
c# 我想使用一个非主线程执行一个while语句 怎么写代码
在C#中,如果你想在一个非主线程上执行一个while循环,可以利用线程或者Task类。下面是一个使用Thread类的例子:
```csharp
// 定义一个单独的线程
Thread workerThread = new Thread(() => {
// 将需要执行的代码放入Lambda表达式中
while (true) {
// 这里编写你的while循环逻辑
Console.WriteLine("Non-main thread is running...");
// 考虑定期检查是否应该停止循环,例如使用一个布尔变量
if (ShouldStopWorking) break; // 假设有一个标志决定何时退出循环
Thread.Sleep(1000); // 每秒执行一次,可以根据需要修改延迟时间
}
});
// 启动线程
workerThread.Start();
// 主线程继续执行其他任务,无需等待这个循环完成
```
如果使用.NET Core或更高版本,推荐使用async/await和Task.Run()来避免创建新的线程:
```csharp
private async void StartNonMainThreadWork()
{
while (true)
{
// 编写你的循环逻辑
Console.WriteLine("Non-main thread is running...");
await Task.Delay(1000); // 等待1秒
if (ShouldStopWorking) break;
}
}
// 在你需要的上下文中启动工作
Task.Run(StartNonMainThreadWork);
```
记得处理好线程同步和异常,特别是在涉及共享资源的情况下。
阅读全文