如何在Windows应用程序中并行运行函数

时间:2014-09-05 10:04:07

标签: c# timer backgroundworker background-process

在我的Windows应用程序中,我有一个功能,我必须每6秒运行一次。 所以,我正在使用System.windows.forms.Timer工具栏 - >设置其间隔6000毫秒 并在该计时器上调用该函数选择事件

     private void tmrConnectionStatus_Tick(object sender, EventArgs e)
         {
             CheckClientConnectinStatus();
         }

工作完美, 但当我通过下面的函数调用其他Windows应用程序..它不工作,直到或除非我从该应用程序返回到主应用程序

                 clsLogs.LogEvent(3, "==============Call to PNS ==============");
                        ProcessStartInfo startInfo = new ProcessStartInfo();
                        startInfo.FileName = strVendorfile; //Vendors exe
                        startInfo.Arguments = "";           //CSV file path

                        clsLogs.LogEvent(1, "SmartTracker to PRINT-N-SPECT:" + System.DateTime.Now);
                        objProcess = Process.Start(startInfo);       
 Lable:
                        Process[] appProc;
                        string strModName, strProcName;
                        strModName = Process.GetCurrentProcess().MainModule.ModuleName;
                        strProcName = "PnS";
                        appProc = Process.GetProcessesByName(strProcName);

                        if (appProc.Length > 0)
                        {
                            Thread.Sleep(5000);
                            goto Lable;
                        }

我想知道有没有办法使用计时器或其他方法连续工作,即使我专注于其他应用程序。

2 个答案:

答案 0 :(得分:0)

你可以使用backgroundworker。它可以在后台工作。

答案 1 :(得分:0)

本文提供了出色的比较,并应包含您需要的信息:Comparing the Timer Classes in the .NET Framework Class Library:

                                    Windows.Forms  System.Timers         System.Threading 
Timer event runs on what thread?    UI thread      UI or worker thread   Worker thread 
Instances are thread safe?          No             Yes                   No 
Familiar/intuitive object model?    Yes            Yes                   No 
Requires Windows Forms?             Yes            No                    No 
Metronome-quality beat?             No             Yes*                  Yes* 
Timer event supports state object?  No             No                    Yes 
Initial timer event schedulable?    No             No                    Yes 
Class supports inheritance?         Yes            Yes                   No

* Depending on the availability of system resources (for example, worker threads) 

注意:还有一个System.Windows.Forms.Time r类。该类基于操作系统计时器支持,如果您没有在线程上传送消息,则不会发生计时器。这使System.Threading.Timer在许多情况下更有用。