C#:尝试将控制台程序传输到GUI时出现问题
我是新来的! 所以我的问题是:我从一家extern公司得到了一个C#演示程序,该程序设置extern设备的设置,然后初始化它并开始记录数据。数据被写入控制台,并在我可以选择的位置流式传输到CSV中。按下控制台中的一个键后,录音停止。我现在正在尝试编写一个简短的GUI来启动和停止此录制。 我所做的: 我将开始重新编码的main方法转换为一个普通的静态方法,并删除了所有writeline,这样控制台就不会启动,然后我创建了一个Windows窗体,有两个按钮,一个开始,一个停止。如果我按开始,录音就开始了,但是我不能用Gui做任何事情,就像被释放一样,控制台仍然出现,我只能通过按下控制台中的一个键来停止这个过程 以下是控制台代码的一小部分:C#:尝试将控制台程序传输到GUI时出现问题,c#,C#,我是新来的! 所以我的问题是:我从一家extern公司得到了一个C#演示程序,该程序设置extern设备的设置,然后初始化它并开始记录数据。数据被写入控制台,并在我可以选择的位置流式传输到CSV中。按下控制台中的一个键后,录音停止。我现在正在尝试编写一个简短的GUI来启动和停止此录制。 我所做的: 我将开始重新编码的main方法转换为一个普通的静态方法,并删除了所有writeline,这样控制台就不会启动,然后我创建了一个Windows窗体,有两个按钮,一个开始,一个停止。如果我按开始,录音就开
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();
}
}
我的尝试:
将主要方法更改为静态记录。
然后按开始按钮,调用该方法
在方法末尾写下以下内容:
while (Rec==true)
{
Thread.Sleep(100);
}
按下停止按钮:set.Rec(false)
但是按下开始按钮后,我再也不能按停止按钮了。
我希望有人能理解我的问题,并能给我一些建议。Thread.Sleep会阻止你的UI做任何事情。考虑使用Stask.Windows .Frase.Time< /P> < P>,而不是睡在一个循环中,你应该让你的<代码>开始>代码>方法返回。将睡眠循环之后的所有代码移动到
Stop
按钮的单击事件处理程序中
(根据代码的结构,您可能还必须将
deviceManager
从局部变量切换为类中的字段)丢弃您所做的操作。创建一个新的GUI项目,然后将控制台示例中的相关部分包含在一个(多个)专用类中,供GUI使用。您可以发布代码句柄开始吗?我认为您需要一个带有取消令牌的任务,当您按下停止键时,该任务将被取消。