2013-10-15 5 views
0

ниже - пример кода, я хочу, чтобы компоненты в очереди принимали локальную переменную «entity», как я могу ее достичь? ТНХКак передать переменную в действие?

private void DoComparison(StuffEntity entity) 
    { 
     try 
     { 
      bool dataFlag = CheckIsNewData(entity.PickingTime, entity.WarningPeriod); 
      if (dataFlag) 
      { 
       Queue<Action<StuffEntity>> queue = new Queue<Action<StuffEntity>>(); 
       //How can I let the queue stuff take the entity? 
       queue.Enqueue(DelaySendingMessageOut); 
       if (!QueueItem.ContainsKey(entity.FridgeID)) 
       { 
        QueueItem.Add(entity.FridgeID, queue); 
       } 
      } 
     } 
     catch (Exception ex) 
     { 
      CommonUnity.WriteLog(ex.Message); 
      CommonUnity.WriteLog(ex.StackTrace); 
     } 
    } 

    private void DelaySendingMessageOut(StuffEntity entity) 
    { 
     int pendingPeroid = entity.PendingTime.ToInt(); 
     if (pendingPeroid <= 0) 
      pendingPeroid = 5; 

     Thread.Sleep(pendingPeroid * 60 * 1000); 
     TriggerCheckingBeforeSendMessageOut(entity); 
    } 
+0

Это не ясно, что вы делаете с очередью? Вы добавили делегата в очередь, как вы планируете его называть? –

+0

'Action' будет использоваться для задержки вызова метода. Таким образом, вы будете передавать экземпляр только тогда, когда вам нужно вызвать. если вам нужно сопоставить отношения. Вам понадобится специальная коллекция, отличная от 'Queue', чтобы удерживать' Action' и 'parameter', которые должны быть переданы –

ответ

0
queue.Enqueue((e) => DelaySendingMessageOut(entity)); 

Но вы можете использовать Queue<Action>, так как вы не будете использовать аргумент e:

Queue<Action> queue = new Queue<Action>(); 
queue.Enqueue(() => DelaySendingMessageOut(entity)); 
Смежные вопросы