RecognizerContext.BackgroundRecognize 方法 (Object)
讓 Recognizer 物件辨識相關聯的 Strokes 集合,並在辨識完成時,以相關聯的應用程式資料引發 Recognition 事件。
命名空間: Microsoft.Ink
組件: Microsoft.Ink (在 Microsoft.Ink.dll 中)
語法
'宣告
Public Sub BackgroundRecognize ( _
customData As Object _
)
'用途
Dim instance As RecognizerContext
Dim customData As Object
instance.BackgroundRecognize(customData)
public void BackgroundRecognize(
Object customData
)
public:
void BackgroundRecognize(
Object^ customData
)
public void BackgroundRecognize(
Object customData
)
public function BackgroundRecognize(
customData : Object
)
參數
- customData
型別:System.Object
在 Recognition 事件中,應用程式可以使用的任何應用程式定義資料。預設值是 null (在 Microsoft® Visual Basic® .NET 中為 Nothing)。
備註
這個方法會指定要非同步執行筆墨辨識。若要同步辨識筆墨,請呼叫 RecognizerContext.Recognize 方法。
這個方法只能辨識最佳結果字串。這個方法並不會建立 RecognitionAlternate 物件。若要執行會建立可用替代項目清單的辨識,請呼叫 BackgroundRecognizeWithAlternates 方法。
如果辨識器不會辨識任何項目,則不會引發 Recognition 事件。
範例
在這個範例中,會自動辨識 InkOverlay 物件中所建立的每個筆劃,並顯示辨識結果。
當 Stroke 事件引發時 (以回應完成筆劃的使用者),剛建立的筆劃會加入至 RecognizerContext 物件的 Strokes 集合中,並且會呼叫 BackgroundRecognize 方法,將目前時間傳遞至 customData 參數。
Private Sub mInkOverlay_Stroke4(ByVal sender As Object, ByVal e As InkCollectorStrokeEventArgs)
' in case background recognition is still occurring, stop it
mRecognizerContext.StopBackgroundRecognition()
' add the stroke, and start recognition
mRecognizerContext.Strokes.Add(e.Stroke)
mRecognizerContext.BackgroundRecognize(DateTime.Now)
End Sub
private void mInkOverlay_Stroke4(object sender, InkCollectorStrokeEventArgs e)
{
// in case background recognition is still occurring, stop it
mRecognizerContext.StopBackgroundRecognition();
// add the stroke, and start recognition, passing current time
mRecognizerContext.Strokes.Add(e.Stroke);
mRecognizerContext.BackgroundRecognize(DateTime.Now);
}
背景辨識完成時,會引發 Recognition 事件。在處理這個事件期間,辨識的結果會放置在清單方塊中。此外,還會從 RecognizerContextRecognitionEventArgs 物件的 CustomData 屬性擷取開始辨識的時間,用來計算辨識所需的耗用總時間。
' event fires when recognition results (without alternates) are ready
Private Sub RecognizerContext_Recognition(ByVal sender As Object, _
ByVal e As RecognizerContextRecognitionEventArgs)
' when updating a control, must use Invoke() since controls are
' not thread safe and recognition occurs on a different thread
If Me.InvokeRequired Then
' recursively call this method via Invoke()
Me.Invoke( _
New RecognizerContextRecognitionEventHandler(AddressOf RecognizerContext_Recognition), _
New Object() {sender, e} _
)
Return
End If
If RecognitionStatus.NoError = e.RecognitionStatus Then
listBoxRecognitionResults.Items.Add(e.Text)
' get the custom data and calculate elapsed time
Dim startTime As DateTime = DirectCast(e.CustomData, DateTime)
Dim endTime As DateTime = DateTime.Now
Dim span As TimeSpan = New TimeSpan(endTime.Ticks - startTime.Ticks)
' display the number of seconds for this recognition to finish
listBoxRecognitionResults.Items.Add(span.TotalSeconds.ToString())
End If
End Sub
// event fires when recognition results (without alternates) are ready
private void RecognizerContext_Recognition(object sender, RecognizerContextRecognitionEventArgs e)
{
// when updating a control, must use Invoke() since controls are
// not thread safe and recognition occurs on a different thread
if (this.InvokeRequired)
{
// recursively call this method via Invoke()
this.Invoke(
new RecognizerContextRecognitionEventHandler(RecognizerContext_Recognition),
new object[] { sender, e }
);
return;
}
if (RecognitionStatus.NoError == e.RecognitionStatus)
{
listBoxRecognitionResults.Items.Add(e.Text);
// get the custom data and calculate elapsed time
DateTime startTime = (DateTime)e.CustomData;
DateTime endTime = DateTime.Now;
TimeSpan span = new TimeSpan(endTime.Ticks - startTime.Ticks);
// display the number of seconds for this recognition to finish
listBoxRecognitionResults.Items.Add(span.TotalSeconds.ToString());
}
}
平台
Windows Vista
.NET Framework 和 .NET Compact Framework 並不支援各種平台的所有版本。如需支援平台版本的相關資訊,請參閱 .NET Framework 系統需求。
版本資訊
.NET Framework
支援版本:3.0