Click here to Skip to main content
15,893,668 members
Home / Discussions / C#
   

C#

 
AnswerRe: Licensing a .NET DLL Pin
Richard MacCutchan16-Nov-17 3:20
mveRichard MacCutchan16-Nov-17 3:20 
QuestionAsync method/task issue Pin
primem0ver15-Nov-17 7:21
primem0ver15-Nov-17 7:21 
I am new to using the "async" functionality in .NET. I have created a few GUI classes that are designed to give feedback to a user while time consuming tasks are completed. The core of this functionality is a "Task" class that makes use of the System.Threading.Tasks.Task class. It contains the "description" of the task being completed, the number of steps to be completed in the task, and the System.Threading.Tasks.Task task that is to be called within an async method. This "API task" that is the actual "task" to be performed amounts to calling a function within the class. The problem is that the creation of my "Task" action is causing a TargetInvocationException. I am getting the impression from the inner exception that the System.Threading.Task.Task is effectively a "null" task and I do not have the experience to understand why. Here is my code inside the async method:

C#
async void OnGenerateMapData()
{
	statusPanel = new StatusPanel();
			
	// add tasks to complete to panel - this causes error
	statusPanel.AddTask(new Task("Processing Map Data", 1081 * 1081, true, new System.Threading.Tasks.Task(() => { ProcessPixelData(); })));
	statusPanel.AddTask(new Task("Generating Shoreline", 1079 * 1079 + 50000, true, new System.Threading.Tasks.Task(() => { ProcessShoreline(); })));
	statusPanel.AddTask(new Task("Updating Map", 1081 * 1081, true, new System.Threading.Tasks.Task(() => { UpdateResult(); })));
	// add panel to UI
	statusPanel.Dock = DockStyle.Fill;
	this.Controls.Add(statusPanel);
	//statusPanel.BringToFront();
			
	Task currentTask = statusPanel.BeginTasks();
	while (currentTask != null)
	{
		await currentTask.Action;
		currentTask = statusPanel.AdvanceCurrentTask(0);
	}

	this.Controls.Remove(statusPanel);
	statusPanel = null;
}


It may help to know that all the function calls being put into the "task" are within the same class as the async method. However, perhaps I need more information (such as a this. before the call)? Or is doing this illegal in its entirety?

EDIT: Just in case it helps... here is my Task class:
C#
public class Task
{
	bool displayAsPercent;
	int currentItem;
	int totalItems;
	object result;

	public System.Threading.Tasks.Task Action { get; private set; }
	public string Description { get; private set; }
	public bool IsComplete { get { return currentItem >= ItemCount; } }
	public int TotalItems { get { return totalItems; } }
	public object Result { get { return result; } }
	public object Baggage { get; private set; }
	public bool Started { get { return currentItem > 0; } }

	public int ItemCount 
	{
		get
		{
			if (displayAsPercent)
				return 100;
			else
				return totalItems;
		}
	}

	public int CompletedValue
	{
		get
		{
			if (displayAsPercent)
				return (int)((float)((float)currentItem / (float)ItemCount) * 100.0f + 0.5f);
			else 
				return currentItem;
		}
	}

	public Task(string description, int stepCount, bool displayAsPercent, System.Threading.Tasks.Task task)
	{
		currentItem = 0;
		Description = description;
		totalItems = stepCount;
		this.displayAsPercent = displayAsPercent;
		Action = task;
	}

	public void Begin(Task previous) { if (previous != null) Baggage = previous.Result; ++currentItem; }
	public void Advance() { ++currentItem; }
	public void Advance(int increase) { currentItem += increase; }
	public void Complete() { currentItem = totalItems; }
	public void Finalize(object result) { this.result = result; }
}


modified 15-Nov-17 13:35pm.

AnswerRe: Async method/task issue Pin
Sascha Lefèvre15-Nov-17 8:33
professionalSascha Lefèvre15-Nov-17 8:33 
GeneralRe: Async method/task issue Pin
primem0ver15-Nov-17 9:52
primem0ver15-Nov-17 9:52 
GeneralRe: Async method/task issue Pin
Sascha Lefèvre15-Nov-17 10:19
professionalSascha Lefèvre15-Nov-17 10:19 
AnswerRe: Async method/task issue Pin
Gerry Schmitz16-Nov-17 4:24
mveGerry Schmitz16-Nov-17 4:24 
GeneralRe: Async method/task issue Pin
primem0ver16-Nov-17 10:57
primem0ver16-Nov-17 10:57 
GeneralRe: Async method/task issue Pin
Gerry Schmitz16-Nov-17 11:13
mveGerry Schmitz16-Nov-17 11:13 
GeneralRe: Async method/task issue Pin
primem0ver28-Nov-17 13:41
primem0ver28-Nov-17 13:41 
GeneralRe: Async method/task issue Pin
Gerry Schmitz29-Nov-17 4:29
mveGerry Schmitz29-Nov-17 4:29 
GeneralRe: Async method/task issue Pin
primem0ver2-Dec-17 13:30
primem0ver2-Dec-17 13:30 
GeneralRe: Async method/task issue Pin
Gerry Schmitz2-Dec-17 13:46
mveGerry Schmitz2-Dec-17 13:46 
GeneralRe: Async method/task issue Pin
primem0ver3-Dec-17 1:13
primem0ver3-Dec-17 1:13 
GeneralRe: Async method/task issue Pin
primem0ver3-Dec-17 1:46
primem0ver3-Dec-17 1:46 
GeneralRe: Async method/task issue Pin
Gerry Schmitz3-Dec-17 3:17
mveGerry Schmitz3-Dec-17 3:17 
GeneralRe: Async method/task issue Pin
primem0ver3-Dec-17 4:03
primem0ver3-Dec-17 4:03 
GeneralRe: Async method/task issue Pin
Gerry Schmitz3-Dec-17 4:41
mveGerry Schmitz3-Dec-17 4:41 
GeneralRe: Async method/task issue Pin
primem0ver4-Dec-17 2:12
primem0ver4-Dec-17 2:12 
GeneralRe: Async method/task issue Pin
Gerry Schmitz4-Dec-17 6:50
mveGerry Schmitz4-Dec-17 6:50 
GeneralRe: Async method/task issue Pin
primem0ver3-Feb-18 23:03
primem0ver3-Feb-18 23:03 
GeneralRe: Async method/task issue Pin
Gerry Schmitz4-Feb-18 7:05
mveGerry Schmitz4-Feb-18 7:05 
Questionin c# school management project Pin
Member 1289859014-Nov-17 19:51
Member 1289859014-Nov-17 19:51 
AnswerRe: in c# school management project Pin
OriginalGriff14-Nov-17 20:11
mveOriginalGriff14-Nov-17 20:11 
AnswerRe: in c# school management project Pin
Gerry Schmitz15-Nov-17 5:41
mveGerry Schmitz15-Nov-17 5:41 
AnswerRe: in c# school management project Pin
jschell15-Nov-17 7:03
jschell15-Nov-17 7:03 

General General    News News    Suggestion Suggestion    Question Question    Bug Bug    Answer Answer    Joke Joke    Praise Praise    Rant Rant    Admin Admin   

Use Ctrl+Left/Right to switch messages, Ctrl+Up/Down to switch threads, Ctrl+Shift+Left/Right to switch pages.