Terraria v1.4.4.9
Terraria source code documentation
Loading...
Searching...
No Matches
BackgroundWorker.cs
Go to the documentation of this file.
3
5
7{
8 private bool _canCancelWorker;
9
11
13
14 private bool _isRunning;
15
17
18 private readonly SendOrPostCallback _operationCompleted;
19
20 private readonly SendOrPostCallback _progressReporter;
21
23
24 public bool IsBusy => _isRunning;
25
27 {
28 get
29 {
31 }
32 set
33 {
35 }
36 }
37
39 {
40 get
41 {
42 return _canCancelWorker;
43 }
44 set
45 {
47 }
48 }
49
51
53
55
61
62 private void AsyncOperationCompleted(object arg)
63 {
64 _isRunning = false;
67 }
68
77
78 protected virtual void OnDoWork(DoWorkEventArgs e)
79 {
80 this.DoWork?.Invoke(this, e);
81 }
82
84 {
85 this.RunWorkerCompleted?.Invoke(this, e);
86 }
87
89 {
90 this.ProgressChanged?.Invoke(this, e);
91 }
92
93 private void ProgressReporter(object arg)
94 {
96 }
97
98 public void ReportProgress(int percentProgress)
99 {
100 ReportProgress(percentProgress, null);
101 }
102
103 public void ReportProgress(int percentProgress, object? userState)
104 {
106 {
108 }
109 ProgressChangedEventArgs progressChangedEventArgs = new ProgressChangedEventArgs(percentProgress, userState);
110 if (_asyncOperation != null)
111 {
112 _asyncOperation.Post(_progressReporter, progressChangedEventArgs);
113 }
114 else
115 {
116 _progressReporter(progressChangedEventArgs);
117 }
118 }
119
120 public void RunWorkerAsync()
121 {
122 RunWorkerAsync(null);
123 }
124
125 public void RunWorkerAsync(object? argument)
126 {
127 if (_isRunning)
128 {
130 }
131 _isRunning = true;
132 _cancellationPending = false;
134 Task.Factory.StartNew(delegate(object arg)
135 {
137 }, argument, CancellationToken.None, TaskCreationOptions.DenyChildAttach, TaskScheduler.Default);
138 }
139
140 private void WorkerThreadStart(object argument)
141 {
142 object result = null;
143 Exception error = null;
144 bool cancelled = false;
145 try
146 {
147 DoWorkEventArgs doWorkEventArgs = new DoWorkEventArgs(argument);
148 OnDoWork(doWorkEventArgs);
149 if (doWorkEventArgs.Cancel)
150 {
151 cancelled = true;
152 }
153 else
154 {
155 result = doWorkEventArgs.Result;
156 }
157 }
158 catch (Exception ex)
159 {
160 error = ex;
161 }
162 RunWorkerCompletedEventArgs arg = new RunWorkerCompletedEventArgs(result, error, cancelled);
164 }
165
166 protected override void Dispose(bool disposing)
167 {
168 }
169}
static AsyncOperation CreateOperation(object? userSuppliedState)
void PostOperationCompleted(SendOrPostCallback d, object? arg)
void Post(SendOrPostCallback d, object? arg)
readonly SendOrPostCallback _operationCompleted
readonly SendOrPostCallback _progressReporter
RunWorkerCompletedEventHandler? RunWorkerCompleted
ProgressChangedEventHandler? ProgressChanged
virtual void OnProgressChanged(ProgressChangedEventArgs e)
void ReportProgress(int percentProgress)
void ReportProgress(int percentProgress, object? userState)
virtual void OnRunWorkerCompleted(RunWorkerCompletedEventArgs e)
override void Dispose(bool disposing)
virtual void OnDoWork(DoWorkEventArgs e)
static string BackgroundWorker_WorkerDoesntReportProgress
Definition SR.cs:24
static string BackgroundWorker_WorkerAlreadyRunning
Definition SR.cs:22
static string BackgroundWorker_WorkerDoesntSupportCancellation
Definition SR.cs:26
Definition SR.cs:7
static new TaskFactory< TResult > Factory
Definition Task.cs:56
delegate void RunWorkerCompletedEventHandler(object? sender, RunWorkerCompletedEventArgs e)
delegate void DoWorkEventHandler(object? sender, DoWorkEventArgs e)
delegate void ProgressChangedEventHandler(object? sender, ProgressChangedEventArgs e)