在我的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;
}
我想知道有没有办法使用计时器或其他方法连续工作,即使我专注于其他应用程序。
答案 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
在许多情况下更有用。