我試圖在影像控制元件上畫很多次,我需要在每次繪制后重繪 和查看它,用戶控制元件保持可訪問、負責任和不凍結。繪圖本身非常快。
我將 Thread 與 Dispatcher.Invoke 一起使用,但它似乎不起作用。MainWindow 變得無回應,直到繪制周期結束。
您可能會看到我在 Invoke 內部和外部嘗試了 2 個帶有回圈的變體。有人可以就這個問題給我建議嗎?
編輯:視圖是在位圖上繪制影像并將其作為影像控制元件的源回傳的物件。
iView 是 MainWindow 上的那個 Image 控制元件。
private void Draw()
{
// setting size of image
view.DataHeight = 500;
view.DataWidth = TDRConnection.MAX_DATAPOINTS;
view.Height = (int)gView.ActualHeight;
view.Width = (int)gView.ActualWidth;
//drawing
iView.Source = view.DrawPixels(connection.GetMeasurementData(),
TDRConnection.MAX_SUPPORTED_CHANNELS,
portColors);
}
private void LiveDrawingAS()
{
Dispatcher.Invoke(() => {
int safety = 0;
for (; safety < 300 && doLiveDrawing; safety ) {
Draw();
//Thread.Sleep(100);
}
MessageBox.Show($"Done {safety} drawings");
});
}
private void LiveDrawingNAS()
{
int safety = 0;
for (; safety < 300 && doLiveDrawing; safety ) {
Dispatcher.Invoke(() => {
Draw();
//Thread.Sleep(100);
});
}
MessageBox.Show($"Done {safety} drawings");
}
private void bLive_Click(object sender, RoutedEventArgs e)
{
doLiveDrawing = true;
new Thread(new ThreadStart(LiveDrawingAS)).Start();
}
private void bStop_Click(object sender, RoutedEventArgs e)
{
doLiveDrawing = false;
}
EDIT2:我已經在 Invoke 之外創建了位圖,現在 MainWindow 是回應式的,但是 Image 控制元件是空的,所以它仍然沒有用:
private void LiveDrawingNAS()
{
WriteableBitmap wbm;
int safety = 0;
for (; safety < 30 && doLiveDrawing; safety ) {
wbm = DrawBitmap();
Dispatcher.Invoke(() => {
iView.Source = wbm;
});
}
MessageBox.Show($"Done {safety} drawings");
}
好的,所以我找到了解決方案。它需要凍結位圖:
private void LiveDrawingOutUI()
{
WriteableBitmap wbm;
int safety = 0;
for (; safety < 300 && doLiveDrawing; safety ) {
wbm = DrawBitmap();
wbm.Freeze();
Dispatcher.Invoke(() => {
iView.Source = wbm;
});
}
MessageBox.Show($"Done {safety} drawings");
}
干杯!
uj5u.com熱心網友回復:
好的,所以我找到了解決方案。它需要凍結位圖。現在我的影像在 Window 回應時用新資料更新:
private void LiveDrawingOutUI()
{
WriteableBitmap wbm;
int safety = 0;
for (; safety < 300 && doLiveDrawing; safety ) {
wbm = DrawBitmap();
wbm.Freeze();
Dispatcher.Invoke(() => {
iView.Source = wbm;
});
}
MessageBox.Show($"Done {safety} drawings");
}
干杯!
轉載請註明出處,本文鏈接:https://www.uj5u.com/shujuku/417878.html
標籤:
