wpf跨線程訪問控制項
1. 如何跨線程調用.NET Windows窗體控制項
(1)窗體及控制項
(2)窗體代碼Form1.cs
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
using System;
using System.Collections.Generic;
using System.Windows.Forms;
using System.Threading;
namespace WindowsFormsApplication1
{
public partial class Form1 : Form
{
public Form1()
{
InitializeComponent();
}
private void button1_Click(object sender, EventArgs e)
{
// 啟動線程
Thread t = new Thread(MyThread);
t.IsBackground = true;
t.Start();
}
void MyThread()
{
while (true)
{
// 在控制項label1上顯示日期和時間
UpdateLabel(DateTime.Now);
Thread.Sleep(1000);
}
}
// 1. 聲明一個委託
delegate void UpdateLableDelegate(DateTime dt);
private void UpdateLabel(DateTime dt)
{
if (label1.InvokeRequired)
{
// 跨線程更新label1處理
UpdateLableDelegate del =
new UpdateLableDelegate(UpdateLabel);
label1.Invoke(del, dt);
}
else
{
// 顯示日期和時間
label1.Text = dt.ToString("yyyy-MM-dd HH:mm:ss");
}
}
}
}
2. winform如何使用委託跨線程訪問控制項,寫了個採集軟體,想在線程裡面直接訪問控制項,哪位知道怎麼寫
窗口載入時:
Control. = false;//窗口元素允許線程操作
3. wpf中「調用線程無法訪問此對象,因為另一個線程擁有該對象。"
出現上面的異常是因為多個線程在同時訪問一個對象造成的,在網上查看了一些資料,說的是在C#2005後不再支持多線程直接訪問界面的控制項(界面創建線程與訪問線程不是同一個線程),但是可以可以使用delegate來解決。 相應的解決方法如下: WPF:Dis...
4. WPF線程怎麼搞
以啊,可以用信號量啦約束,另一個線程不能訪問,使一個對象被一個線程訪問的時候,但是這樣可能會改變你想要得到的結果
5. wpf中 我新開一個線程添加控制項到主窗體
wpf中使用Dispatcher類控制線程, 當非同步操作完成後, 可以調用
Dispatcher.BeginInvoke(DispatcherPriority.Normal, (Action)(() => { //to do sth })); 返回UI線程
6. WPF中想在一個窗口中調用另一個窗口的控制項(DataGrid),怎麼實現
請問為什麼你需要這樣來做。
首先設計方面就不應該有這樣跨窗體直接UI線程上的操作。
A窗口可以修改共享內存中的數據,MVVM方式綁定的B窗口上的DG直接自己反映數據變更。
再,你這兩個窗口現在在同一線程中還可以用上面那位同學的做法。
但是如果在不同線程或者在不同機器的時候,
你這樣的設計,不是找死么。
7. Wpf中「由於其他線程擁有此對象,因此調用線程無法對其進行訪問」
bitmap資源之前被調用過,沒有釋放,所以再調用時無法訪問。