Warning: file_get_contents(/data/phpspider/zhask/data//catemap/2/csharp/265.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
C# 每5秒与服务器同步一次线程_C#_Web Services_Polling_Microsoft Sync Framework - Fatal编程技术网

C# 每5秒与服务器同步一次线程

C# 每5秒与服务器同步一次线程,c#,web-services,polling,microsoft-sync-framework,C#,Web Services,Polling,Microsoft Sync Framework,我有一个服务器-客户机环境,客户机每5秒钟与服务器连接并同步数据 对于同步,我在客户机上使用了一个后台线程,它可以正常工作,但是在一个特定的硬件上,GetNetworkAvailable方法偶尔抛出内存不足异常。错误是在没有逻辑的情况下发生的,所以我猜这个硬件有一些不好的地方。无论如何,我想听听你对我的背景调查功能的看法 private void SynchronizedWorker() { bool initialization = true; int

我有一个服务器-客户机环境,客户机每5秒钟与服务器连接并同步数据

对于同步,我在客户机上使用了一个后台线程,它可以正常工作,但是在一个特定的硬件上,GetNetworkAvailable方法偶尔抛出内存不足异常。错误是在没有逻辑的情况下发生的,所以我猜这个硬件有一些不好的地方。无论如何,我想听听你对我的背景调查功能的看法

private void SynchronizedWorker()
    {
        bool initialization = true;
        int initializationTries = 0;

        // Sync loop
        while (!_shouldStop)
        {
            // Initialize locals
            int syncInterval = _syncInterval; // Reset Sync Interval to default
            SyncStatus syncStatus = SyncStatus; // Get current Status
            bool hasNetworkConnection = true; // Has Network connection

            try
            {
                //*******************************************
                // Check Network connection
                //*******************************************
                if (!NetworkInterface.GetIsNetworkAvailable())
                {
                    hasNetworkConnection = false;
                    _syncResetEvent.Set();
                    syncStatus = SyncStatus.Offline;
                }
                else if (syncStatus == SyncStatus.Offline) // Is in offline - State, but Network available again recognize going online
                {
                    _syncResetEvent.Set();
                    hasNetworkConnection = IsServiceAvailable();
                    // Sync-Status stays offline
                    if (!hasNetworkConnection)
                    {
                        // Wait 1 minute, before retry
                        syncInterval = 60000;
                    }
                }

                //*******************************************
                // Proceed with Syncronisation
                //*******************************************
                if (hasNetworkConnection)
                {
                    syncStatus = SyncStatus.Ok;
                    // Try Initialization
                    if (initialization)
                    {
                        try
                        {
                            // Sync initialization here...
                            // ..............................
                            ////////////////////////////////////
                        }
                        catch (Exception ex)
                        {
                            log.LogError(string.Format("Initialization Try {0}", initializationTries), ex);
                            syncStatus = SyncStatus.InitializationFailed;
                        }
                    }

                    // To many Init-Tries --> Stop
                    if (initializationTries > 1)
                    {
                        // Proceed
                        _syncResetEvent.Set();
                        _syncStatus = syncStatus;
                        break; // Stop Synch
                    }

                    // Debug
                    var sw = System.Diagnostics.Stopwatch.StartNew();

                    // Do Up/Download
                    if (!initialization)
                    {
                        try
                        {
                            // Synchronisation with service here...
                            // ..............................
                            ////////////////////////////////////

                            // Proceed
                            _syncResetEvent.Set();
                        }
                        catch (Exception ex)
                        {
                            log.LogError("Download", ex);
                            syncStatus = SyncStatus.SynchFailed;
                        }
                    }
                }

                // Set Sync status
                _syncStatus = syncStatus;
            }
            catch (Exception ex)
            {
                log.LogError("Sync-Worker", ex);
                _syncStatus = Core.Sync.SyncStatus.SynchFailed;
                // Proceed
                _syncResetEvent.Set();
                // Reset Force
                _syncForce = false;
            }
            finally
            {
                // Set Completed
                if (OnSyncCompleted != null)
                {
                    OnSyncCompleted(downloaded, uploaded, executed);
                }

                // Always Wait for Interval
                DateTime sleepuntil = DateTime.Now.AddMilliseconds(syncInterval);
                while (sleepuntil > DateTime.Now && !_shouldStop && !_syncForce)
                {
                    // Sleep
                    Thread.Sleep(100);
                }
            }
        }

        // Stop
        _syncStatus = SyncStatus.Unknown;
 }

问题是什么?如果您想查看代码,请尝试代码查看网站。谢谢,张贴在那里。