![](/img/trans.png)
[英]C# Passing method name to parameterizedthreadstart with variable
[英]ArgumentException in ParameterizedThreadStart with Graphics C#
我需要通過參數將Graphics對象傳遞到線程啟動方法中,但是由於某種原因,它使其無效並拋出ArgumentException:參數無效。
問題的簡化視圖:
private void Canvas_Paint(object sender, PaintEventArgs e)
{
Start(e.Graphics);
}
public void Start(Graphics g)
{
new Thread(new ParameterizedThreadStart(Render)).Start(g);
}
private void Render(object g)
{
((Graphics)g).DrawRectangle(Pens.Red, 50, 50, 50, 50);
}
這是因為在事件處理程序中獲得的Graphics對象是臨時的,並且在執行后台線程時被處置。
而是應將控件傳遞給后台線程。
另外,為了安全起見,還應使用System.ComponentModel.AsyncOperationManager
代替后台線程:
private void Canvas_Paint(object sender, PaintEventArgs e)
{
Start((Control)sender);
}
public void Start(Control uiControl)
{
AsyncOperation asyncOperation = AsyncOperationManager.CreateOperation(null);
asyncOperation.Post(Render, uiControl);
}
private void Render(object g)
{
((Control)g).CreateGraphics().DrawRectangle(Pens.Red, 50, 50, 50, 50);
}
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.