// 非同期処理ボタンメソッドAsyncButton. public void AsyncButton() { // RunningDelegateの生成. RunningDelegate running = new RunningDelegate(Running); // runningの生成. IAsyncResult iar1 = button1.BeginInvoke(running); // button1.BeginInvokeでrunningが持つメソッドに委譲. button1.EndInvoke(iar1); // button1.EndInvokeで完了. // 10秒待つ.(擬似的な重たい処理.) Thread.Sleep(10000); // Thread.Sleepで10秒休止. // FinishDelegateの生成. FinishDelegate finish = new FinishDelegate(Finish); // finishの生成. IAsyncResult iar2 = button1.BeginInvoke(finish); // button1.BeginInvokeでfinishが持つメソッドに委譲. button1.EndInvoke(iar2); // button1.EndInvokeで完了. }
public void SaveAvi(string input_wav_filename, string output_avi_filename, double start_time, double end_time, int dest_width, int dest_height, bool is_compress, RunningDelegate dlg) { int f_rate = frame_rate_ / 256; VfwAviWriter avi_writer = new VfwAviWriter(output_avi_filename, frame_rate_ / 256, 1); bool is_success = false; try { int start_frame = (start_time >= 0.0 ? (int)(start_time * f_rate) : 0); int end_frame = (end_time >= 0.0 ? (int)(Math.Ceiling(end_time * f_rate)) : frame_count_) - 1; if (end_frame >= frame_count_) { end_frame = frame_count_ - 1; } for (int i = start_frame; i <= end_frame; ++i) { Bitmap bitmap = GetFrame(i, dest_width, dest_height); avi_writer.AddFrame(bitmap); bitmap.Dispose(); } if (input_wav_filename != "") { avi_writer.AddWave(input_wav_filename); } is_success = true; } finally { avi_writer.Close(); if (!is_success) { if (File.Exists(output_avi_filename)) { try { File.Delete(output_avi_filename); } catch (Exception) { } } } } }