我有一個在多個商店中使用的delphi程序。這些商店都連接到在線mysql數據庫。在應用程序啓動時,程序連接到數據庫。當電腦沒有連接到互聯網時,程序就凍結了。我發現這下面如果計算機連接到互聯網,測試過程:如何測試電腦是否可以上網?
public
function IsConnectedToInternet: Boolean;
const
INTERNET_CONNECTION_MODEM = 1;
INTERNET_CONNECTION_LAN = 2;
INTERNET_CONNECTION_PROXY = 4;
INTERNET_CONNECTION_MODEM_BUSY = 8;
implementation
function InternetGetConnectedState(lpdwFlags: LPDWORD;
dwReserved: DWORD): BOOL; stdcall; external 'WININET.DLL';
function TForm1.IsConnectedToInternet: Boolean;
var
dwConnectionTypes: Integer;
begin
try
dwConnectionTypes := INTERNET_CONNECTION_MODEM +
INTERNET_CONNECTION_LAN +
INTERNET_CONNECTION_PROXY;
if InternetGetConnectedState(@dwConnectionTypes, 0) then
Result := true
else
Result := false;
except
Result := false;
end;
end;
procedure Tform1.FormCreate(Sender: TObject);
begin
If IsConnectedToInternet then
MysqlConnection.Connect;
end;
這工作在測試正常,如果計算機是連接到無線等。但它不如果這個測試連接有互聯網接入。例如,如果電腦連接到10GB的無線網絡,當10GB用完時,電腦仍會連接到無線網絡,但無法訪問互聯網。
在這種情況下,上述功能將給出結果true使程序嘗試連接,這將使程序凍結。
我該如何解決這個錯誤?是否有程序測試電腦是否有互聯網訪問?
爲什麼要檢查?只是試圖連接。如果它有效,那麼你就連接起來了。如果失敗了,那你就不是。 –
那麼正確的做法是保持你的gui線程的db連接代碼。並使您的程序在連接失敗時健壯。如果你真的想停止你的程序凍結,你不會把數據庫代碼放在GUI線程上。 –
@DavidHeffernan您是否建議我創建一個連接到服務器的獨立單元? –