как запустить функцию параллельно в приложении Windows

В моем приложении 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;
                        }

Я хочу знать, есть ли способ использовать таймер или другой метод, с помощью которого можно непрерывно работать в фоновом режиме, даже если я сосредоточен на другом приложении.


person VARUN NAYAK    schedule 05.09.2014    source источник
comment
Посмотрите на это All-about-NET-Timers-A -Сравнение .   -  person Sagar Pilkhwal    schedule 05.09.2014
comment
какой таймер вы используете??   -  person Neel    schedule 05.09.2014
comment
как я упоминал в своем вопросе, я использую System.windows.forms.Timer   -  person VARUN NAYAK    schedule 05.09.2014


Ответы (2)


Вы можете использовать backgroundworker. Он будет работать в фоновом режиме.

person Mairaj Ahmad    schedule 05.09.2014

В этой статье представлено отличное сравнение, и она должна содержать необходимую вам информацию: Сравнение классов таймеров в библиотека классов .NET Framework:

                                    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.Timer. Этот класс основан на поддержке таймера операционной системы, и если вы не отправляете сообщения в поток, ваш таймер не сработает. Это делает System.Threading.Timer более полезным во многих сценариях.

person Sagar Pilkhwal    schedule 05.09.2014