我是C#的新手! 所以我的问题:我从外部公司获得了一个C#演示程序,该程序设置了一个外部设备的设置,而不是初始化它并开始记录数据。数据被写入控制台并在我可以选择的位置流式传输到CSV。按下控制台中的按键后,录制停止。我现在正在尝试编写一个启动和停止此录制的简短GUI。 我做了什么: 我将启动重新编码的main方法转换为普通的静态方法并删除了所有的writelines,因此控制台没有启动,而是创建了一个带有2个按钮,一个Start和一个Stop的Windows窗体。如果我按下开始,录制开始,但是我无法对Gui做任何事情就像冻结一样,控制台仍然出现,我只能通过按控制台中的一个键来停止该过程。
以下是控制台代码的信息:
class BHJKL
{
system
private static A;
private static B;
// This method will be executed every time new data is received
static void OnNewDataReceived(object sender, NewDataEventArgs eventArgs)
{
//some code in here
using (StreamWriter file = new StreamWriter(@"C:\Users\XYZ\File_Trial" + DateTime.Now.DayOfYear + ".csv", true))
{
//Writeline data..
}
}
}
//这是我改变它之前的主要方法
public static void Record()
{
// Here is some Code that configure the Settings of the device
// initialize device
// MORE CODE USING THE COMPANYS EXTERN LIBRARYS TO START THE DEVICE
//start device
deviceManager.DeviceStart();
while (!Console.KeyAvailable) // as long as no key is pressed do...
{
Thread.Sleep(100); // do nothing, let the event processing thread that is managed by the library handle incomming data
}
//stop device
deviceManager.DeviceStop();
//unsubscribe event
deviceManager.NewDataReceived -= OnNewDataReceived;
//deinitialize device
deviceManager.DeinitializeDevice();
//dispose device
deviceManager.Dispose();
}
}
我的尝试: 将main方法更改为静态录制。 按下按开始按钮,调用方法。
在方法的最后写下:
while (Rec==true)
{
Thread.Sleep(100);
}
按下停止按钮:set.Rec(false) 但按下开始按钮后,我无法按下停止按钮。 我希望有人能理解我的问题并给我一些建议。
答案 0 :(得分:2)
Thread.Sleep阻止你的UI做任何事情。考虑使用System.Windows.Forms.Timer
答案 1 :(得分:0)
您应该让Start
方法返回,而不是在循环中睡觉。将睡眠循环后的所有代码移动到Stop
按钮的单击事件处理程序中。
(根据代码的结构,您可能还必须将deviceManager
从局部变量切换为类中的字段)