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

时间:2018-03-20 09:42:02

标签: c#

我是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) 但按下开始按钮后,我无法按下停止按钮。 我希望有人能理解我的问题并给我一些建议。

2 个答案:

答案 0 :(得分:2)

Thread.Sleep阻止你的UI做任何事情。考虑使用System.Windows.Forms.Timer

答案 1 :(得分:0)

您应该让Start方法返回,而不是在循环中睡觉。将睡眠循环后的所有代码移动到Stop按钮的单击事件处理程序中。

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