2015-10-06 2 views
1

Я следующий конструктор в моем классе, который инициализирует свою задачу:Инициализация задачи с действием, которое вызывает с параметром ИНТ

public ReportGeneratorThread(Func<int, bool> getPermission, Action<object> a) 
    {    
     this.action = a;   
     this.t = new Task(this.action = this.InvokedAction, this.cancellationToken); 
     this.getPermission = getPermission;    
    } 

Метод InvokedAction, который будет вызываться задачей определяется таким образом, как :

private void InvokedAction(object obj) 
    {   
     Debug.WriteLine(DateTime.Now.ToLongTimeString() + " Task " + this.t.Id + " has STARTED Generating a report"); 
     this.GenerateReport(); 
     throw new ArgumentException("For testing purpose");     
    } 

проблема возникает, когда я хочу, чтобы вызвать этот метод с межд, а не объект, так как это не принято задачей. Есть ли подход, как я могу вызвать этот метод с Int значения с:

Action<int> 
+0

Просьба показать код, который не работает. –

+0

Это не так, как сейчас. Новый метод Task() не принимает действие с int как лямбда-выражение. Я просто хочу вызвать метод с int как параметр –

ответ

3

Поскольку вы не можете назвать Action<int> с аргументом типа объекта необходимо преобразовать его вручную. Обратите внимание, что было бы неплохо, если бы требовалось другое - вы можете легко пройти Action<object>, где ожидается Action<int>.

... new Task(v => intAction((int)v),... 

Возможно, вам придется обрабатывать исключения литья, если вы не можете гарантировать, что аргумент всегда является целым числом.

0

Можете ли вы box ИНТ перед вызовом?

int i = 123; 
object o = i; 
+0

Проблема в том, что мне нужно объявить свое действие с определенным int в другом классе и вызвать этот конструктор из этого класса. –

Смежные вопросы