Trong dự án hiện tại của tôi có một lớp Mẫu mà trông như thế này:Giải quyết sự cố "Không thể truy cập đối tượng được xử lý". ngoại lệ
public partial class FormMain : Form
{
System.Timers.Timer timer;
Point previousLocation;
double distance;
public FormMain()
{
InitializeComponent();
distance = 0;
timer = new System.Timers.Timer(50);
timer.AutoReset = true;
timer.Elapsed += new System.Timers.ElapsedEventHandler(timer_Elapsed);
timer.Start();
}
private void timer_Elapsed(object sender, System.Timers.ElapsedEventArgs e)
{
if (previousLocation != null)
{
// some code
UpdateDistanceLabel(distance);
UpdateSpeedLabel(v);
}
previousLocation = Cursor.Position;
}
private void UpdateDistanceLabel(double newDistance)
{
if (!lblDistance.IsDisposed && !IsDisposed)
{
Invoke(new Action(() => lblDistance.Text = String.Format("Distance: {0} pixels", newDistance)));
}
}
private void UpdateSpeedLabel(double newSpeed)
{
if (!lblSpeed.IsDisposed && !IsDisposed)
{
Invoke(new Action(() => lblSpeed.Text = String.Format("Speed: {0} pixels per second", newSpeed)));
}
}
}
Như bạn thấy, tôi đang sử dụng một đối tượng System.Timers.Timer. Tôi biết tôi có thể sử dụng System.Windows.Forms.Timer, nhưng tôi khá quan tâm đến lý do tại sao tôi vẫn nhận được ngoại lệ được hiển thị trong tiêu đề. Nó được ném vào cuộc gọi Invoke trong phương thức UpdateDistanceLabel. Điều gì làm tôi bối rối là nó nói "Không thể truy cập đối tượng được xử lý: FormMain" mặc dù tôi đang kiểm tra xem nó có được xử lý hay không. Vì vậy, điều đó không nên xảy ra. Tôi cũng đã cố gắng xử lý các đối tượng bộ đếm thời gian trong sự kiện FormClosing cũng như ghi đè Vứt bỏ (bool) và xử lý nó ở đó, cả hai đều tiếc là không giúp gì cả. Ngoài ra, ngoại lệ không phải lúc nào cũng bị ném, được cho là chỉ khi bộ hẹn giờ xảy ra cháy trong khi chương trình đang thoát. Nó vẫn xảy ra rất nhiều.
Tôi đã thấy rằng có rất nhiều chủ đề về điều này, nhưng tôi đã thử các giải pháp được đăng ở đó, hầu hết trong số họ liên quan đến việc kiểm tra thuộc tính IsDisposed - không hoạt động đối với tôi. Vì vậy, tôi đoán tôi đang làm điều gì đó sai trái.
Vì vậy, câu hỏi của tôi: Tại sao mã được đăng trên lửa là ngoại lệ mặc dù tôi đang kiểm tra xem các đối tượng tôi đang truy cập có được xử lý hay không?
Cảm ơn. Đó là những gì tôi đã làm bây giờ, tuy nhiên, nó không ảnh hưởng đến hành vi rất nhiều. – haiyyu