C#:尝试将控制台程序传输到GUI时出现问题

C#:尝试将控制台程序传输到GUI时出现问题,c#,C#,我是新来的! 所以我的问题是:我从一家extern公司得到了一个C#演示程序,该程序设置extern设备的设置,然后初始化它并开始记录数据。数据被写入控制台,并在我可以选择的位置流式传输到CSV中。按下控制台中的一个键后,录音停止。我现在正在尝试编写一个简短的GUI来启动和停止此录制。 我所做的: 我将开始重新编码的main方法转换为一个普通的静态方法,并删除了所有writeline,这样控制台就不会启动,然后我创建了一个Windows窗体,有两个按钮,一个开始,一个停止。如果我按开始,录音就开

我是新来的! 所以我的问题是:我从一家extern公司得到了一个C#演示程序,该程序设置extern设备的设置,然后初始化它并开始记录数据。数据被写入控制台,并在我可以选择的位置流式传输到CSV中。按下控制台中的一个键后,录音停止。我现在正在尝试编写一个简短的GUI来启动和停止此录制。 我所做的: 我将开始重新编码的main方法转换为一个普通的静态方法,并删除了所有writeline,这样控制台就不会启动,然后我创建了一个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();




    }
}
我的尝试: 将主要方法更改为静态记录。 然后按开始按钮,调用该方法

在方法末尾写下以下内容:

while (Rec==true) 
{
    Thread.Sleep(100); 
}
按下停止按钮:set.Rec(false) 但是按下开始按钮后,我再也不能按停止按钮了。
我希望有人能理解我的问题,并能给我一些建议。

Thread.Sleep会阻止你的UI做任何事情。考虑使用Stask.Windows .Frase.Time< /P> < P>,而不是睡在一个循环中,你应该让你的<代码>开始>代码>方法返回。将睡眠循环之后的所有代码移动到
Stop
按钮的单击事件处理程序中


(根据代码的结构,您可能还必须将
deviceManager
从局部变量切换为类中的字段)

丢弃您所做的操作。创建一个新的GUI项目,然后将控制台示例中的相关部分包含在一个(多个)专用类中,供GUI使用。您可以发布代码句柄开始吗?我认为您需要一个带有取消令牌的任务,当您按下停止键时,该任务将被取消。