编辑:
这就是我所做的: 在 Form1 中:
ScreenCapture sc;
AviFile af;
在 Form1 构造函数中:
sc = new ScreenCapture();
af = new AviFile();
在 Form1 timer1 滴答事件中:
private void timer1_Tick(object sender, EventArgs e)
{
if (playImages == true)
{
timer1.Enabled = false;
play();
timer1.Enabled = true;
}
else
{
af.CreateAvi(this.sc);
}
}
更改后的 AviFile 类:
using System;
using System.Collections.Generic;
using System.ComponentModel;
using System.Drawing;
using System.Data;
using System.Text;
using System.Windows.Forms;
using AviFile;
using ScreenShotDemo;
namespace ScreenVideoRecorder
{
class AviFile
{
AviManager aviManager;
Bitmap bmp;
public AviFile()
{
aviManager = new AviManager(@"d:\testdata\new.avi", false);
}
public void CreateAvi(ScreenCapture sc)
{
bmp = new Bitmap(sc.CaptureScreen());
VideoStream aviStream = aviManager.AddVideoStream(false, 25, bmp);//dlg.Rate, bmp);
aviStream.AddFrame(bmp);
bmp.Dispose();
}
public AviManager avim
{
get
{
return aviManager;
}
set
{
aviManager = value;
}
}
}
}
在Form1按钮单击事件停止:
private void button3_Click(object sender, EventArgs e)
{
timer1.Enabled = false;
if (af != null)
{
af.avim.Close();
}
}
但在我在截屏几秒钟后运行它后停止它之前:这是 button1,它启动计时器并截屏:
private void button1_Click(object sender, EventArgs e)
{
playImages = false;
timer1.Enabled = true;
}
几秒钟后,我得到了一个例外:
Exception in AVIFileCreateStream: -2147205019
System.Exception was unhandled
HResult=-2146233088
Message=Exception in AVIFileCreateStream: -2147205019
Source=AviFile
StackTrace:
at AviFile.VideoStream.CreateStreamWithoutFormat()
at AviFile.VideoStream.CreateStream()
at AviFile.VideoStream..ctor(Int32 aviFile, Boolean writeCompressed, Double frameRate, Bitmap firstFrame)
at AviFile.AviManager.AddVideoStream(Boolean isCompressed, Double frameRate, Bitmap firstFrame)
at ScreenVideoRecorder.AviFile.CreateAvi(ScreenCapture sc) in d:\C-Sharp\ScreenVideoRecorder\ScreenVideoRecorder\ScreenVideoRecorder\AviFile.cs:line 27
at ScreenVideoRecorder.Form1.timer1_Tick(Object sender, EventArgs e) in d:\C-Sharp\ScreenVideoRecorder\ScreenVideoRecorder\ScreenVideoRecorder\Form1.cs:line 61
at System.Windows.Forms.Timer.OnTick(EventArgs e)
at System.Windows.Forms.Timer.TimerNativeWindow.WndProc(Message& m)
at System.Windows.Forms.NativeWindow.DebuggableCallback(IntPtr hWnd, Int32 msg, IntPtr wparam, IntPtr lparam)
at System.Windows.Forms.UnsafeNativeMethods.DispatchMessageW(MSG& msg)
at System.Windows.Forms.Application.ComponentManager.System.Windows.Forms.UnsafeNativeMethods.IMsoComponentManager.FPushMessageLoop(IntPtr dwComponentID, Int32 reason, Int32 pvLoopData)
at System.Windows.Forms.Application.ThreadContext.RunMessageLoopInner(Int32 reason, ApplicationContext context)
at System.Windows.Forms.Application.ThreadContext.RunMessageLoop(Int32 reason, ApplicationContext context)
at System.Windows.Forms.Application.Run(Form mainForm)
at ScreenVideoRecorder.Program.Main() in d:\C-Sharp\ScreenVideoRecorder\ScreenVideoRecorder\ScreenVideoRecorder\Program.cs:line 19
at System.AppDomain._nExecuteAssembly(RuntimeAssembly assembly, String[] args)
at System.AppDomain.ExecuteAssembly(String assemblyFile, Evidence assemblySecurity, String[] args)
at Microsoft.VisualStudio.HostingProcess.HostProc.RunUsersAssembly()
at System.Threading.ThreadHelper.ThreadStart_Context(Object state)
at System.Threading.ExecutionContext.RunInternal(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state, Boolean preserveSyncCtx)
at System.Threading.ExecutionContext.Run(ExecutionContext executionContext, ContextCallback callback, Object state)
at System.Threading.ThreadHelper.ThreadStart()
InnerException:
课程中的例外是:VideoStream 这不是我的课程,它来自我下载源文件的网站:http: //www.codeproject.com/Articles/7388/A-Simple-C-Wrapper-for-the-AviFile -图书馆
我该如何解决?