簡體   English   中英

帶有圖形C#的ParameterizedThreadStart中的ArgumentException

[英]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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM